U kunt niet in één stap een kolom met gegevens erin aan uw tabel toevoegen. U moet ten minste twee afzonderlijke instructies gebruiken om de DDL eerst uit te voeren (ALTER TABLE
) en de DML-seconde (UPDATE
of INSERT ... ON DUPLICATE KEY UPDATE
).
Dit betekent dat om een kolom toe te voegen met een NOT NULL
beperking vereist drie stappen:
- Kolom met nulling toevoegen
- Kolom vullen met waarden in elke rij
- Voeg de
NOT NULL
. toe beperking tot de kolom
Als alternatief kunt u door een "dummy"-standaardwaarde te gebruiken, dit in twee stappen doen (pas op dat u geen "dummy"-waarden laat rondzweven, of gebruik waarden die zinvol/goed gedocumenteerd zijn):
- Kolom toevoegen als
NOT NULL DEFAULT ''
(of gebruik bijvoorbeeld0
voor numerieke typen) - Kolom vullen met waarden in elke rij
U kunt de tabel optioneel opnieuw wijzigen om de DEFAULT
. te verwijderen waarde. Persoonlijk geef ik de voorkeur aan de eerste methode omdat deze geen betekenisloze waarden in uw tabel introduceert en de kans groter is dat er een fout optreedt als de tweede stap een probleem heeft. Ik misschien ga met de tweede methode als een kolom zich leent voor een bepaalde natuurlijke DEFAULT
waarde en ik ben van plan om dat in de definitie van de finaletafel te houden.
Bovendien parametreert u uw query niet correct; u moet de parameterwaarden doorgeven aan de methode in plaats van het stringargument binnen de methodeaanroep op te maken. Met andere woorden:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!