Mejor respuesta
¿Cómo inserto en una tabla a través de Python si un valor no existe? ¿ya existe en SQLite?
cursor.execute("INSERT INTO author (name) VALUES(?) SELECT * FROM author WHERE NOT EXISTS(SELECT * FROM author)", (aname, ))
Suponiendo:
- tienes un
UNIQUE
oPRIMARY KEY
restricción en laname
columna, y - no desea duplicar
name
inserciones para arrojar errores,
entonces la consulta SQLite sería:
INSERT OR IGNORE INTO author (name) VALUES (?)
(Lea la página ON CONFLICT de SQLite para comprender más sobre la resolución de conflictos y las cinco opciones de resolución diferentes disponible— INSERT OR IGNORE
es simplemente azúcar sintáctico para INSERT ON CONFLICT IGNORE
.)
Si no tiene restricciones en la columna name
, entonces la forma más segura de hacerlo es dos consultas independientes:
-
SELECT * FROM author WHERE name=?
, entonces si eso vuelve con 0 filas coincidentes, -
INSERT INTO author (name) VALUES (?)
Respuesta
la declaración SQL en sí es incorrecta, y * en general debe evitarse
insertar en autor (nombre)
seleccionar? del autor
donde no existe (seleccione 42 del autor donde nombre =?)