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
UNIQUEellerPRIMARY KEYbegränsning inamekolumnen, och - du inte vill ha dubbletter
nameinfogar 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 =?)