仅当条目不存在时如何插入表中?

时间:2017-04-22 21:15:10

标签: database python-2.7 sqlite jupyter-notebook

以下是应该将作者姓名添加到表中的代码的一部分。

def create_author_table():
    cursor.execute("CREATE TABLE IF NOT EXISTS author(name VARCHAR(100),PRIMARY KEY (name))")

if authorFound == 1:
    cursor.execute("INSERT author (name) VALUES (?)", (aname, ))
    conn.commit()

我的其余代码与我认为的问题无关,所以我没有包含它。

我有很长的作者姓名列表,每次读入名称时,我都会尝试将其写入作者表。但是,有些名称是重复的,这是一个问题,因为name是主键,因此我无法插入重复项。有没有人知道只插入表中尚不存在的名称的查询?我正在使用python 2.7和sqlite通过jupyter笔记本以防任何人需要知道。

我意识到这个网站上已经有很多类似的问题,但是我已经浏览了它们,但我没有运气。这是我第一次在python工作,所以我一般都缺乏经验。

1 个答案:

答案 0 :(得分:0)

SQLite中最简单的方法是定义一个唯一索引:

create unique index unq_author_name on author(name);

如果name已存在,则插入失败。这是最好的方法,因为数据库验证了关系完整性。

另一种方法是在插入时检查值:

INSERT author (name)
    SELECT x.name
    FROM (SELECT ? as name) x
    WHERE NOT EXISTS (SELECT 1 FROM author a WHERE a.name = x.name);

我担心在某些竞争条件下,可以多次输入相同的名称。