2010-07-19 6 views
5

Sto tentando di inserire dati nel database SQLite utilizzando Python.Controllo duplicato durante l'inserimento in SQLite

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

Questa interrogazione è generato dinamicamente da Python e sto verificando se la data è già esiste nella tabella prima di inserire e la sua non funziona nel database SQLite. Ottenere questo errore near "WHERE": syntax error.

Sto facendo qualcosa di sbagliato?

Grazie per il vostro aiuto.

risposta

2

Sono abbastanza sicuro che INSERT non abbia una clausola WHERE (the documentation doesn't mention any). Cosa si può fare:

  • creare un indice univoco sulla LABEL
  • uso INSERT OR FAIL
  • se questo genera un errore, la riga esiste già.
+1

Sì, non ne ero a conoscenza. Grazie :) – ukanth

2

Si sta verificando un errore di sintassi perché non è allowed syntax. Dal tuo esempio presumo lo schema è probabilmente:

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

nel qual caso primary key implica unique. Ma, dal momento che si consente la generazione automatica di uid allora non ti importa che cosa è il valore è, semplicemente non si vuole duplicare label s nel qual caso è in realtà cura che label essere univoco in modo raccontarla così:

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

che funziona quindi come previsto:

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 

per inciso, se i nomi data_table, uid e label non sono esempi di nomi per i fini di questa domanda allora è necessario utilizzare nomi più significativi in ​​quanto questi sono terribilmente uninformative.

+0

Grazie a @msw, è vero. i nomi sono solo di esempio, sto usando un'etichetta come unica. – ukanth

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

è possibile utilizzare questo invece di INSERISCI O FAIL.

+0

Questo sta dando "Errore: vicino a" WHERE ": errore di sintassi" – Harsha