2010-07-19 87 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