Как удалить дубликат записи из базы данных sqlite3 в Python3? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть две базы данных пользовательских данных, и мне нужно удалить дубликаты записей из db_a, проверив один столбец (login) в db_a and db_b и, если он обнаружит, указанная c login уже существует в db_b он просто должен удалить дублирующую запись из db_a. Для этого я подумал о DELETE Statement в SQL, но он показывает мне ошибку -

sqlite3.OperationalError: no such column: user_old_info.login

Обе базы данных заполнены данными. Я использую Python 3 & SQLite3.

import sqlite3

db_a = sqlite3.connect('new_users.db')
c_a = db_a.cursor()

c_a.execute("CREATE TABLE IF NOT EXISTS user_info (first TEXT, last TEXT, login TEXT)")
db_a.commit()

db_b = sqlite3.connect('main.db')
c_b = db_b.cursor()
c_b.execute("CREATE TABLE IF NOT EXISTS user_old_info (first TEXT, last TEXT, login TEXT)")
db_b.commit()

c_a.execute('DELETE FROM user_info WHERE user_info.login = user_old_info.login')
db_a.commit()

Также пытался использовать оператор JOIN:

c_a.execute('SELECT login FROM user_info JOIN user_old_info ON user_old_info.login=user_info.login')
db_a.commit()

Ошибка одинакова в обоих случаях:

sqlite3.OperationalError: no such column: user_old_info.login

ОБНОВЛЕНИЕ: Я попробовал ЗАЯВЛЕНИЕ БАЗЫ ДАННЫХ ATTACH и вот та же ошибка ...

attachDatabaseSQL = "ATTACH DATABASE main.db AS checklogin"
dbSpec = ("main.db",)
c_a.execute(attachDatabaseSQL, dbSpec)
db_a.commit()

c_a.execute('DELETE FROM user_info WHERE user_info.login = checklogin.login')
db_a.commit()

Ошибка --->

line 16, in <module>
c_a.execute(attachDatabaseSQL, dbSpec)
sqlite3.OperationalError: no such column: main.db

Сделал это согласно this Прикрепите файл базы данных

1 Ответ

0 голосов
/ 09 апреля 2020

Вы выполняете запрос на db_a, который ничего не знает о db_b. Вам нужно либо использовать что-то вроде attach , либо (если производительность не является проблемой) просто отделить запрос, сначала получив logins из db_b в одном запросе, а затем удалив те, которые существуют в db_a в другом запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...