以下是应该将作者姓名添加到表中的代码的一部分。
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工作,所以我一般都缺乏经验。
答案 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);
我担心在某些竞争条件下,可以多次输入相同的名称。