在SQLite中插入时检查重复

时间:2010-07-19 14:09:31

标签: python windows sqlite pysqlite

我正在尝试使用Python将数据插入SQLite数据库。

INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
    WHERE "UK" NOT EXISTS IN (SELECT LABEL FROM DATA_TABLE);

这个查询是从Python动态生成的,我正在检查在插入之前表中是否已经存在日期,并且它在SQLite数据库中不起作用。 得到此near "WHERE": syntax error错误。

我做错了吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我很确定INSERT没有WHERE子句(the documentation doesn't mention any)。你能做什么:

  • LABEL
  • 上创建唯一索引
  • 使用INSERT OR FAIL
  • 如果触发错误,则该行已存在。

答案 1 :(得分:2)

它给你一个语法错误,因为它不是allowed syntax。从你的例子中我假设架构可能是:

create table data_table (uid integer primary key autoincrement.
     label string);

在这种情况下primary key暗示unique。但是,既然你允许自动生成uid,那么你不关心它的价值是什么,你只是不想要重复的label,在这种情况下你真的关心label是独特的,所以告诉它:

create table data_table (uid integer primary key autoincrement,
     label string unique on conflict fail);

然后按预期工作:

sqlite> insert into data_table (label) values ("uk");
sqlite> insert into data_table (label) values ("uk");
Error: column label is not unique
sqlite> select * from data_table;
1|uk

顺便提一下,如果名称data_tableuidlabel不是用于此问题的示例名称,那么您应该使用更有意义的名称,因为这些名称非常缺乏信息。

答案 2 :(得分:1)

INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");

您可以使用此代替INSERT或FAIL。