Python SQLite3执行许多: query that simulates set(data) - set(initial_data)

标签 python sql python-2.7 sqlite

假设我在 Sqlite3 DB 中有一些数据,这些数据是通过从 Python 的 sqlite3 模块执行 executemany() 插入的。

示例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) 的事情(if len(data) > len(initial_data))并插入到我的表中,但我想知道是否可以以某种方式改变我的查询,以便我可以直接从 SQL 执行此操作。有人对此有什么想法吗?

PS:不知道是否重要,但 len(data) 将始终为 30k-50k。

最佳答案

您可以尝试使用INSERT IGNORE查询。

self.db.executemany("""
    INSERT IGNORE INTO some_table (
        col1,
        col2,
        col3
    )
    VALUES (?, ?, ?)
""", data)

关于Python SQLite3执行许多: query that simulates set(data) - set(initial_data),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711959/

相关文章:

php - 如何知道某个元素可以在哪个页面找到?

mysql - 在 MySQL 中根据 YEAR、WEEK 和 WEEKDAY 计算 DATE

python - 在Python中控制线程

python - 编写脚本时在 python 2 和 3 版本之间切换

python - 在没有输入的情况下使用 GNU 并行生成 n 个工作线程

python - 属性错误: Event instance has no attribute 'delete'

sql - 可以根据 MySQL 中的 3+ 个小数点向下舍入到小数点后第二位

python - 是否可以在 sqlalchemy 中使用 ResultProxy 对象读取多个结果集?

python - PIL协助Python

python - 按每个元素的第一个字符拆分列表