Melhor resposta
Como faço para inserir em uma tabela através do Python se um valor não já existe no SQLite?
cursor.execute("INSERT INTO author (name) VALUES(?) SELECT * FROM author WHERE NOT EXISTS(SELECT * FROM author)", (aname, ))
Presumindo:
- que você tem um
UNIQUE
ouPRIMARY KEY
restrição na colunaname
, e - você não deseja inserções
name
duplicadas para gerar erros,
então a consulta SQLite seria:
INSERT OR IGNORE INTO author (name) VALUES (?)
(Leia a página da cláusula SQLite ON CONFLICT para entender mais sobre a resolução de conflitos e as cinco diferentes opções de resolução disponível— INSERT OR IGNORE
é apenas um açúcar sintático para INSERT ON CONFLICT IGNORE
.)
Se você não tem nenhuma restrição na coluna name
, então a maneira mais segura de fazer isso é duas consultas separadas:
-
SELECT * FROM author WHERE name=?
, então, se voltar com 0 linhas correspondentes, -
INSERT INTO author (name) VALUES (?)
Resposta
a própria instrução SQL está errada e * em geral deve ser evitada
inserir no autor (nome)
selecionar? do autor
onde não existe (selecione 42 do autor, onde nome =?)