Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible d'ajouter une colonne d'un cadre de données pandas à mysql en python

Vous ne pouvez pas ajouter une colonne à votre table avec des données en une seule étape. Vous devez utiliser au moins deux instructions distinctes pour effectuer d'abord le DDL (ALTER TABLE ) et la seconde DML (UPDATE ou INSERT ... ON DUPLICATE KEY UPDATE ).

Cela signifie que pour ajouter une colonne avec un NOT NULL contrainte nécessite trois étapes :

  1. Ajouter une colonne nullable
  2. Remplir la colonne avec des valeurs dans chaque ligne
  3. Ajouter le NOT NULL contrainte à la colonne

Alternativement, en utilisant une valeur par défaut "fictive", vous pouvez le faire en deux étapes (faites juste attention à ne pas laisser de valeurs "fictives" flottantes, ou utilisez des valeurs significatives/bien documentées) :

  1. Ajouter une colonne en tant que NOT NULL DEFAULT '' (ou utilisez par exemple 0 pour les types numériques)
  2. Remplir la colonne avec des valeurs dans chaque ligne

Vous pouvez éventuellement modifier à nouveau la table pour supprimer le DEFAULT évaluer. Personnellement, je préfère la première méthode car elle n'introduit pas de valeurs sans signification dans votre table et il est plus susceptible de générer une erreur si la deuxième étape a un problème. Je pourrais optez pour la deuxième méthode lorsqu'une colonne se prête à un certain DEFAULT naturel valeur et je prévois de la conserver dans la définition de la table finale.

De plus, vous ne paramétrez pas correctement votre requête ; vous devez passer les valeurs des paramètres à la méthode plutôt que de formater l'argument de chaîne à l'intérieur de l'appel de méthode. En d'autres termes :

cursor.execute("Query with %s, %s, ...", iterable_with_values)  # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values)  # NOT this!