Предположим, у меня есть некоторые данные в БД Sqlite3, которые вставляются путем выполнения executemany()
из модуля sqlite3
Python.
Пример initial_data
:
initial_data = [
('aa', 'test1', 'home1'),
('aa', 'test2', 'home2'),
('aa', 'test3', 'home3'),
('aa', 'test4', 'home4'),
('aa', 'test5', 'home5'),
]
Пример executemany()
:
self.db.executemany("""
INSERT INTO some_table (
col1,
col2,
col3
)
VALUES (?, ?, ?)
""", data)
После добавления вышеупомянутого initial_data
в таблицу у меня может появиться новый набор data
, который выглядит следующим образом:
data = [
('aa', 'test1', 'home1'),
('aa', 'test2', 'home2'),
('aa', 'test3', 'home3'),
('aa', 'test6', 'home6'), // this is new
('aa', 'test4', 'home4'),
('aa', 'test5', 'home5'),
]
Как у вас естьвероятно, заметил, что в data
есть новая строка, которая должна быть вставлена в мою таблицу.
Теперь я знаю, что могу сделать что-то вроде set(data) - set(initial_data)
(если len(data) > len(initial_data)
) и просто вставить это в свою таблицу, но мне было интересно, могу ли я каким-то образом изменить свой запрос, чтобы я мог сделатьэто прямо из SQL. У кого-нибудь есть идеи по этому поводу?
PS: Не знаю, если это имеет значение, но len(data)
всегда будет 30k-50k.