sql >> Base de Datos >  >> RDS >> Mysql

No se puede agregar una columna de un marco de datos de pandas a mysql en python

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:

  1. Agregar columna anulable
  2. Rellenar columna con valores en cada fila
  3. 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):

  1. Añadir columna como NOT NULL DEFAULT '' (o use, por ejemplo, 0 para tipos numéricos)
  2. 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!