Do tabulky nemůžete přidat sloupec s daty v jednom kroku. K provedení DDL musíte nejprve použít alespoň dva samostatné příkazy (ALTER TABLE
) a sekundu DML (UPDATE
nebo INSERT ... ON DUPLICATE KEY UPDATE
).
To znamená, že chcete přidat sloupec s NOT NULL
omezení vyžaduje tři kroky:
- Přidat sloupec s možnou hodnotou Null
- Vyplňte sloupec hodnotami v každém řádku
- Přidejte
NOT NULL
omezení na sloupec
Alternativně pomocí „fiktivní“ výchozí hodnoty to můžete provést ve dvou krocích (jen si dejte pozor, abyste nenechali žádné „fiktivní“ hodnoty volně plovoucí, nebo použili hodnoty, které jsou smysluplné/dobře zdokumentované):
- Přidat sloupec jako
NOT NULL DEFAULT ''
(nebo použijte např.0
pro číselné typy) - Vyplňte sloupec hodnotami v každém řádku
Volitelně můžete tabulku znovu upravit a odstranit DEFAULT
hodnota. Osobně preferuji první metodu, protože do vaší tabulky nezavádí nesmyslné hodnoty a je pravděpodobnější, že vyvolá chybu, pokud má druhý krok problém. Mohl bych použijte druhou metodu, když se sloupec hodí k určitému přirozenému DEFAULT
hodnotu a plánuji ji ponechat v definici konečné tabulky.
Navíc není parametrizace dotazu správně; měli byste předat metodě hodnoty parametrů spíše než formátování argumentu řetězce uvnitř volání metody. Jinými slovy:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!