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:
- Nullable-Spalte hinzufügen
- Spalte in jeder Zeile mit Werten füllen
- Fügen Sie
NOT NULLhinzu 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):
- Spalte als
NOT NULL DEFAULT ''hinzufügen (oder verwenden Sie z. B.0für numerische Typen) - 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!