Python sqlite3:INSERT到表WHERE NOT EXISTS,使用?替换参数

时间:2016-10-06 14:37:40

标签: python python-2.7 sqlite

我从不一定唯一的描述列表中创建描述表。我希望该表只包含不同的描述,因此在将描述插入表中时,我需要检查它们是否已经存在。我的代码(简化)如下所示:

cur.execute(''' CREATE TABLE descriptions
            (id INTEGER PRIMARY KEY AUTOINCREMENT, desc TEXT)''')

descripts  = ["d1", "d2", "d3", "d4", "d3", "d1", "d5", "d6", "d7", "d2"]
cur.executemany('''
    INSERT INTO descriptions(desc) 
    VALUES (?) 
    WHERE NOT EXISTS (
        SELECT * 
        FROM descriptions as d 
        WHERE d.desc=?) 
        ''', zip(descripts, descripts))

结果是OperationalError: near "WHERE": syntax error,我不确定我出错的确切位置。

请注意:我意识到我可以在python中使用set()结构来解决这个问题,但出于学术原因,这是不允许的。

由于

1 个答案:

答案 0 :(得分:1)

VALUES替换SELECT应该

cursor.executemany('''
    INSERT INTO descriptions(desc)
    SELECT (?)
    WHERE NOT EXISTS (
        SELECT *
        FROM descriptions as d
        WHERE d.desc=?)''', 
    zip(descripts, descripts))