Nie możesz dodać do tabeli kolumny zawierającej wszystkie dane w jednym kroku. Aby najpierw wykonać DDL, musisz użyć co najmniej dwóch oddzielnych instrukcji (ALTER TABLE ) i drugi DML (UPDATE lub INSERT ... ON DUPLICATE KEY UPDATE ).
Oznacza to, że aby dodać kolumnę z NOT NULL ograniczenie wymaga trzech kroków:
- Dodaj kolumnę dopuszczającą wartość null
- Wypełnij kolumnę wartościami w każdym wierszu
- Dodaj
NOT NULLograniczenie do kolumny
Alternatywnie, używając „fikcyjnej” wartości domyślnej, możesz to zrobić w dwóch krokach (należy uważać, aby nie pozostawić żadnych „fałszywych” wartości lub użyć wartości, które są znaczące/dobrze udokumentowane):
- Dodaj kolumnę jako
NOT NULL DEFAULT ''(lub użyj np.0dla typów numerycznych) - Wypełnij kolumnę wartościami w każdym wierszu
Możesz opcjonalnie zmienić tabelę ponownie, aby usunąć DEFAULT wartość. Osobiście wolę pierwszą metodę, ponieważ nie wprowadza ona do tabeli bezsensownych wartości i jest bardziej prawdopodobne, że wyrzuci błąd, jeśli drugi krok ma problem. mogę idź z drugą metodą, gdy kolumna nadaje się do pewnego naturalnego DEFAULT wartość i planuję zachować ją w definicji stołu finałowego.
Ponadto nie parametryzujesz poprawnie swojej kwerendy; powinieneś przekazać wartości parametrów do metody zamiast formatowania argumentu ciągu wewnątrz wywołania metody. Innymi słowy:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!