Bedste svar
Hvordan indsætter jeg i en tabel gennem Python, hvis en værdi ikke findes der allerede i SQLite?
cursor.execute("INSERT INTO author (name) VALUES(?) SELECT * FROM author WHERE NOT EXISTS(SELECT * FROM author)", (aname, ))
Under forudsætning af:
- har du en
UNIQUE
ellerPRIMARY KEY
begrænsning iname
kolonnen, og - du ikke vil have duplikat
name
indsatser for at kaste fejl,
så vil SQLite-forespørgslen være:
INSERT OR IGNORE INTO author (name) VALUES (?)
(Læs SQLite PÅ KONFLIKT-klausul for at forstå mere om konfliktløsning og de fem forskellige løsningsvalg tilgængelig – INSERT OR IGNORE
er bare syntaktisk sukker til INSERT ON CONFLICT IGNORE
.)
Hvis du har ikke nogen begrænsninger for name
kolonnen, så den sikreste måde at gøre dette på er som to separate forespørgsler:
-
SELECT * FROM author WHERE name=?
, så hvis det kommer tilbage med 0 matchende rækker, -
INSERT INTO author (name) VALUES (?)
Svar
Selve SQL-sætningen er forkert, og * generelt bør undgås
indsæt i forfatter (navn)
vælg? fra forfatter
hvor der ikke findes (vælg 42 fra forfatter hvor navn =?)