2010-07-19 6 views
5

Ich versuche, Daten in SQLite-Datenbank mit Python einzufügen.Überprüfen Sie doppelte beim Einfügen in SQLite

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

Diese Abfrage wird dynamisch aus Python erzeugt und ich bin Überprüfung, ob das Datum vorhanden ist bereits in der Tabelle vor dem Einsetzen und seine nicht in SQLite-Datenbank arbeiten. Fehler near "WHERE": syntax error bekommen.

Mache ich etwas falsch?

Danke für Ihre Hilfe.

Antwort

2

Ich bin mir ziemlich sicher, dass INSERT keine WHERE Klausel (the documentation doesn't mention any) hat. Was Sie tun können:

  • einen eindeutigen Index erstellen, die auf LABEL
  • Verwendung INSERT OR FAIL
  • wenn das einen Fehler auslöst, besteht die Reihe bereits.
+1

Ja, das war mir nicht bewusst. Danke :) – ukanth

2

Es gibt Ihnen einen Syntaxfehler, weil es nicht allowed syntax ist. Von Ihrem Beispiel nehme ich an dem Schema ist wahrscheinlich:

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

in diesem Fall primary key impliziert unique. Aber da Sie die automatische Generierung von uid erlauben dann kümmert es dich nicht, was es Wert ist, kann man einfach nicht label s duplizieren wollen, in dem Fall, dass Sie eigentlich darauf, dass label eindeutig sein es so sagen so:

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

, die dann wie erwartet funktioniert:

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 

Übrigens, wenn die Namen data_table, uid und label sind nicht Beispiel Namen für die Zwecke dieser Frage, dann sollten Sie aussagekräftigeren Namen verwenden, da diese schrecklich uninformativ sind.

+0

Danke @msw, das ist wahr. Namen sind nur Beispiele, ich verwende Label als ein Unikat. – ukanth

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

Sie können dies anstelle von INSERT OR FAIL verwenden.

+0

Dies gibt "Fehler: in der Nähe von" WHERE ": Syntaxfehler" – Harsha

Verwandte Themen