在SQLite插入时检查重复项
我正在尝试用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 个回答
1
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");
你可以用这个来代替 INSERT OR FAIL。
2
你遇到语法错误是因为这不是< a href="http://www.sqlite.org/lang_insert.html" rel="nofollow noreferrer">允许的语法。根据你的例子,我猜测你的数据库结构可能是这样的:
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_table
、uid
和label
这些名字不是为了这个问题而举的例子,那么你应该使用更有意义的名字,因为这些名字实在是太不直观了。
2
我很确定 INSERT
语句是没有 WHERE
条件的(文档里没有提到)。你可以做的事情有:
- 在
LABEL
上创建一个唯一索引 - 使用
INSERT OR FAIL
语句 - 如果这导致了错误,那说明这行数据已经存在了。