Не можете да добавите колона към вашата таблица с данни в нея с една стъпка. Трябва да използвате поне две отделни изрази, за да изпълните първо DDL (ALTER TABLE
) и DML секундата (UPDATE
). или INSERT ... ON DUPLICATE KEY UPDATE
).
Това означава, че да добавите колона с NOT NULL
ограничението изисква три стъпки:
- Добавяне на колона с нула
- Попълнете колоната със стойности във всеки ред
- Добавете
NOT NULL
ограничение към колоната
Като алтернатива, като използвате "фиктивна" стойност по подразбиране, можете да го направите в две стъпки (само внимавайте да не оставяте никакви "фиктивни" стойности да плават наоколо или да използвате стойности, които са смислени/добре документирани):
- Добавете колона като
NOT NULL DEFAULT ''
(или използвайте например0
за числови типове) - Попълнете колоната със стойности във всеки ред
Можете по желание да промените таблицата отново, за да премахнете DEFAULT
стойност. Лично аз предпочитам първия метод, защото той не въвежда безсмислени стойности във вашата таблица и е по-вероятно да изведе грешка, ако втората стъпка има проблем. Аз може би преминете с втория метод, когато колона се поддава на определен естествен DEFAULT
стойност и смятам да запазя това в дефиницията на крайната таблица.
Освен това не параметризирате правилно заявката си; трябва да предадете стойностите на параметрите на метода вместо да форматира аргумента низ вътре в извикването на метода. С други думи:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!