Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Es ist nicht möglich, eine Spalte aus einem Pandas-Datenrahmen zu MySQL in Python hinzuzufügen

Sie können Ihrer Tabelle nicht in einem Schritt eine Spalte mit Daten hinzufügen. Sie müssen mindestens zwei separate Anweisungen verwenden, um die DDL zuerst auszuführen (ALTER TABLE ) und die zweite DML (UPDATE oder INSERT ... ON DUPLICATE KEY UPDATE ).

Das bedeutet, eine Spalte mit einem NOT NULL hinzuzufügen Constraint erfordert drei Schritte:

  1. Nullable-Spalte hinzufügen
  2. Spalte in jeder Zeile mit Werten füllen
  3. Fügen Sie NOT NULL hinzu Beschränkung auf die Spalte

Alternativ können Sie dies auch in zwei Schritten tun, indem Sie einen „Dummy“-Standardwert verwenden (achten Sie nur darauf, keine „Dummy“-Werte im Umlauf zu lassen, oder verwenden Sie aussagekräftige/gut dokumentierte Werte):

  1. Spalte als NOT NULL DEFAULT '' hinzufügen (oder verwenden Sie z. B. 0 für numerische Typen)
  2. Spalte in jeder Zeile mit Werten füllen

Sie können die Tabelle optional erneut ändern, um den DEFAULT zu entfernen Wert. Persönlich bevorzuge ich die erste Methode, weil sie keine bedeutungslosen Werte in Ihre Tabelle einfügt und eher einen Fehler auslöst, wenn der zweite Schritt ein Problem hat. Ich vielleicht Verwenden Sie die zweite Methode, wenn sich eine Spalte für einen bestimmten natürlichen DEFAULT eignet Wert und ich plane, dies in der Final Table-Definition beizubehalten.

Darüber hinaus parametrisieren Sie Ihre Abfrage nicht richtig; Sie sollten die Parameterwerte an die Methode übergeben anstatt das String-Argument innerhalb des Methodenaufrufs zu formatieren. Mit anderen Worten:

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