代码之家  ›  专栏  ›  技术社区  ›  ukanth

在sqlite中插入时检查重复项

  •  5
  • ukanth  · 技术社区  · 14 年前

    我正在尝试使用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 回复  |  直到 14 年前
        1
  •  2
  •   Piskvor left the building Rohit Kumar    14 年前

    我很确定 INSERT 没有一个 WHERE 子句( the documentation doesn't mention any )你能做的:

    • 在上创建唯一索引 LABEL
    • 使用 INSERT OR FAIL
    • 如果这会引发错误,则该行已存在。
        2
  •  2
  •   msw    14 年前

    它给你一个语法错误,因为它不是 allowed syntax . 根据您的示例,我假定模式可能是:

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

    在这种情况下 primary key 暗示 unique . 但是,因为你允许自动生成 uid 那么你不在乎它的价值是什么,你只是不想复制 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 标签 不是这个问题的示例名称,那么您应该使用更有意义的名称,因为这些名称非常不具有格式性。

        3
  •  1
  •   user396159    14 年前
    INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK")  
    WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK");
    

    您可以使用它而不是插入或失败。