Bästa svaret
Hur infogar jag i en tabell genom Python om ett värde inte finns det redan i SQLite?
cursor.execute("INSERT INTO author (name) VALUES(?) SELECT * FROM author WHERE NOT EXISTS(SELECT * FROM author)", (aname, ))
Om du antar:
- har du en
UNIQUE
ellerPRIMARY KEY
begränsning iname
kolumnen, och - du inte vill ha dubbletter
name
infogar för att kasta fel,
då skulle SQLite-frågan vara:
INSERT OR IGNORE INTO author (name) VALUES (?)
(Läs SQLite ON CONFLICT clause sidan för att förstå mer om konfliktlösning och de fem olika upplösningsalternativen tillgängligt – INSERT OR IGNORE
är bara syntaktiskt socker för INSERT ON CONFLICT IGNORE
.)
Om du har inte några begränsningar för kolumnen name
, så det säkraste sättet att göra detta är som två separata frågor:
-
SELECT * FROM author WHERE name=?
, om det kommer tillbaka med 0 matchande rader, -
INSERT INTO author (name) VALUES (?)
Svar
själva SQL-satsen är fel och * i allmänhet bör undvikas
infoga i författare (namn)
välj? från författare
där det inte finns (välj 42 från författare där namn =?)