No puede agregar una columna a su tabla con datos en un solo paso. Debe usar al menos dos declaraciones separadas para realizar el DDL primero (ALTER TABLE
) y el segundo DML (UPDATE
o INSERT ... ON DUPLICATE KEY UPDATE
).
Esto significa que para agregar una columna con un NOT NULL
la restricción requiere tres pasos:
- Agregar columna anulable
- Rellenar columna con valores en cada fila
- Agregue el
NOT NULL
restricción a la columna
Alternativamente, al usar un valor predeterminado "ficticio", puede hacerlo en dos pasos (solo tenga cuidado de no dejar ningún valor "ficticio" flotando, o usar valores que sean significativos/bien documentados):
- Añadir columna como
NOT NULL DEFAULT ''
(o use, por ejemplo,0
para tipos numéricos) - Rellenar columna con valores en cada fila
Opcionalmente, puede modificar la tabla nuevamente para eliminar el DEFAULT
valor. Personalmente, prefiero el primer método porque no introduce valores sin sentido en su tabla y es más probable que arroje un error si el segundo paso tiene un problema. Yo podría ir con el segundo método cuando una columna se presta a un cierto DEFAULT
natural value y planeo mantener eso en la definición de la tabla final.
Además, no está parametrizando su consulta correctamente; deberías pasar los valores de los parámetros al método en lugar de formatear el argumento de cadena dentro de la llamada al método. En otras palabras:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!