2010-07-19 32 views
5

Tôi đang cố gắng chèn dữ liệu vào cơ sở dữ liệu SQLite bằng cách sử dụng Python.Kiểm tra trùng lặp khi chèn trong SQLite

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

Truy vấn này được tạo động từ Python và tôi kiểm tra xem ngày đã tồn tại trong bảng trước khi chèn và nó không hoạt động trong cơ sở dữ liệu SQLite. Nhận lỗi này near "WHERE": syntax error.

Tôi có làm gì sai không?

Cảm ơn sự giúp đỡ của bạn.

Trả lời

2

Tôi chắc chắn rằng INSERT không có mệnh đề WHERE (the documentation doesn't mention any). Những gì bạn có thể làm:

  • tạo một unique index trên LABEL
  • sử dụng INSERT OR FAIL
  • nếu điều đó gây nên một lỗi, hàng đã tồn tại.
+1

Có, tôi không biết điều đó. Cảm ơn :) – ukanth

2

Báo cáo này cung cấp cho bạn lỗi cú pháp vì không phải là allowed syntax. Từ ví dụ của bạn tôi đoán schema có lẽ là:

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

trong trường hợp primary key ngụ ý unique. Nhưng, kể từ khi bạn cho phép tự động tạo ra các uid sau đó bạn không quan tâm nó giá trị là gì, bạn chỉ không muốn lặp lại label s trong trường hợp bạn thực sự quan tâm mà label là duy nhất để nói với nó như vậy:

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

mà sau đó làm việc như mong đợi:

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 

Ngẫu nhiên, nếu tên data_table, uid, và label không tên ví dụ cho các mục đích của câu hỏi này thì bạn nên sử dụng tên có ý nghĩa hơn vì đây là khủng khiếp không đủ thông tin.

+0

Cảm ơn @msw, đó là sự thật. tên chỉ là ví dụ, tôi đang sử dụng nhãn là duy nhất. – ukanth

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

bạn có thể sử dụng thay vì INSERT HOẶC FAIL.

+0

Điều này đang đưa ra "Lỗi: gần" WHERE ": lỗi cú pháp" – Harsha

Các vấn đề liên quan