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 NULL
ograniczenie 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.0
dla 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!