Форум программистов, компьютерный форум, киберфорум
SQLite
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128

Удаление дубликатов

23.04.2021, 10:24. Показов 2353. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте! Я пишу бот программу на питоне,

при нажатии команды /start создается папка на сервере и внутри папки база данных со след. структурой:

name TEXT,
surname TEXT ,
date_birth TEXT,
nick TEXT


Затем после создания папки и базы (для КАЖДОГО ПОЛЬЗОВАТЕЛЯ уникальный файл и база данных) этот пользователь должен отправить txt файл со следующим содержанием:

Ivan Petrov 14.12.1984 electron
....
etc


данных может быть много.


Эти данные построчно считываются с файла и записываются в переменные

name = ""
surname = ""
date = ""
nickname = ""=



Затем идет коннект к базе и последующий процесс записи данных в базу.

Python
1
2
3
4
connect = sqlite3.connect(f'C:\\Users\\Oybek\\Desktop\\python\\telegram_bot\\downloads\\{user_id}\\{user_id}.db')
            cursor = connect.cursor()
            cursor.execute("INSERT INTO main_data(name,surname,date_birth,nick ) VALUES (?,?,?,?)",[name, surname, date, nickname])
            connect.commit()


Но если пользователь потом отправит новый файл и например там 3 новых данных, а 1 повторяющийся, в базу должно добавиться эти 3 новые, а 1 повторяющаяся должна не добавляться.


ПОМОГИТЕ пожалуйста с этой задачкой. Я Сломал голову, но никак не могу найти решение этой проблемы.



Вот ниже код.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import telebot
import os
import sqlite3
 
 
bot = telebot.TeleBot('TOKEN')
src = 'C:\\Users\\Oybek\\Desktop\\python\\telegram_bot\\downloads\\'
 
@bot.message_handler(commands=['start'])
 
# идет запись уникального айди юзера, затем проверяется в директории есть ли такая папка с названием его айди, если нету такой папки идет ее создание
 
 
def create_folder_and_db(message):
    try:
        user_id = message.chat.id
        check_exist_files = os.listdir()
        for items in check_exist_files:
            if items != str(user_id):
                os.mkdir(f'{src}{str(user_id)}')
                bot.reply_to(message, "Персональная папка создана (ЗАГЛУШКА , СМЕНИТЬ ТЕКСТ)")
                break
    except FileExistsError:
        bot.reply_to(message, "Вы уже зарегистрированы в нашем боте! Пройдите к след этапу")
        
### затем идет создание уникальной базы данных для этого пользователя в его персональной папке
 
    os.chdir(src + str(user_id) + '//')
    connect = sqlite3.connect(f'{user_id}.db')
    cursor = connect.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS main_data(
                        name TEXT,
                        surname TEXT ,
                        date_birth TEXT,
                        nick TEXT
        )""")
    connect.commit()
 
    bot.send_message(message.chat.id, "Отправить файл txt [заглушка ]")
 
@bot.message_handler(content_types=['document'])
 
### тут идет загрузка того файла , который юзер отправил, сохранятся этот файл в его персональной папке
def get_file(message):
    name = ""
    surname = ""
    date = ""
    nickname = ""
    os.chdir(src)
    list_files = os.listdir()
    for items in list_files:
        if items == str(message.chat.id):
            os.chdir(src + str(message.chat.id))
            user_id = message.chat.id
            file_info = bot.get_file(message.document.file_id)
            download = bot.download_file(file_info.file_path)
            save = src + str(message.chat.id) + '//' + message.document.file_name
            with open(save, 'wb') as f:
                f.write(download)
            bot.reply_to(message, "Saved it carefully!")
        else:
            pass
### тут идет считывание файла и последующее назначение их к переменным name surname date nickname
    with open(save, 'r') as f1:
        files_data = f1.readlines()
        for item in files_data:
            split_v2=item.split(" ")
            name = split_v2[0]
            surname = split_v2[1]
            date = split_v2[2]
            nickname = split_v2[3]
 
### тут идет запись считанных данных в базу 
            connect = sqlite3.connect(f'C:\\Users\\Oybek\\Desktop\\python\\telegram_bot\\downloads\\{user_id}\\{user_id}.db')
            cursor = connect.cursor()
            cursor.execute("INSERT INTO main_data(name,surname,date_birth,nick) VALUES (?,?,?,?)",[name, surname, date, nickname])
            connect.commit()
 
 
 
bot.polling()


помогите написать код, который будет убирать повторяющиеся данные при этом не препятствовать добавлению уникальных
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2021, 10:24
Ответы с готовыми решениями:

Удаление дубликатов в SQLite
Добрый день, знаю что тема избита, и полно примеров, но по каким то невиданным причинам не доходит до меня убогого... В базе данных в...

Удаление дубликатов + ассинхронное удаление из другой таблицы
Есть две таблицы tbl_content : id, title tbl_pics : id, picname 1. Нужно удалить дубликаты "title" из таблицы...

Удаление дубликатов
Здравствуйте. В SQL-запросах, особо не силен. Прошу вашей помощи. Есть не маленькая база данных. В ней одна таблица в которой имеется...

2
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.04.2021, 11:33
А создать составной уникальный индекс по тем 4 полям и вместо INSERT использовать REPLACE не?
0
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
23.04.2021, 11:55  [ТС]
Аватар, помогите написать.пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2021, 11:55
Помогаю со студенческими работами здесь

Удаление дубликатов
Как удалить из базы дубликаты, т.е. primati key у них отличаются, а отстальный данные совпадают?

Удаление дубликатов записей
Доброго время суток. Помогите пожалуйста с написанием запроса. Мне нужно написать запрос на удаление дубликатов записей 1 таблицы.

Удаление дубликатов с условием
Почти у каждой записи есть дублирующие данные. После прошлого программиста нашел такой косят, говорят, что это появилось после последнего...

Удаление дубликатов postgres
Необходимо для создания уникального констрайнта удалить все дубликаты. Найти повторы можно так SELECT "F_TagName_ID", ...

Удаление дубликатов по состоянию
Добрый день, выполняю запрос, получаю такую таблицу: Номер Состояние row 401 0 23 512 1 66 512 0 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru