2010-07-19 89 views
5

我想使用Python将数据插入SQLite数据库。插入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错误。

我做错了什么?

感谢您的帮助。

回答

2

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

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

是的,我没有意识到这一点。谢谢:) – ukanth 2010-07-19 14:28:25

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是不是这个问题就因为这些是可怕的无信息,你应该使用更有意义的名称的目的,例如名称。

+0

谢谢@msw,那是真的。名称只是示例,我将标签用作唯一。 – ukanth 2010-07-20 02:58:11

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

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

+0

这是给“错误:附近”WHERE“:语法错误” – Harsha 2016-02-10 08:34:27