Python SQLite3 executemany:模拟set(data)-set(initial_data)的查询

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

示例initial_data

initial_data = [
    ('aa','test1','home1'),('aa','test2','home2'),'test3','home3'),'test4','home4'),'test5','home5'),]

示例executemany()

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

将上面的initial_data插入表后,我可能会有一组新的data,如下所示:

data = [
    ('aa','test6','home6'),// this is new
    ('aa',]

您可能已经注意到,data中有一个新行,这是应该插入到我的表中的唯一行。

现在,我知道我可以做类似set(data) - set(initial_data)(如果是len(data) > len(initial_data)的操作,并将其插入到表中,但是我想知道是否可以以某种方式更改查询,以便可以直接从SQL执行此操作。有人对此有任何想法吗?

PS:如果重要的话,Dunno,但是len(data)始终为30k-50k。

wuhaizhonggd 回答:Python SQLite3 executemany:模拟set(data)-set(initial_data)的查询

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

self.db.executemany("""
    INSERT IGNORE INTO some_table (
        col1,col2,col3
    )
    VALUES (?,?,?)
""",data)
本文链接:https://www.f2er.com/3159443.html

大家都在问