すべてのデータを含む列を1つのステップでテーブルに追加することはできません。最初にDDLを実行するには、少なくとも2つの個別のステートメントを使用する必要があります(ALTER TABLE
)およびDML秒(UPDATE
またはINSERT ... ON DUPLICATE KEY UPDATE
。
これは、NOT NULL
の列を追加することを意味します 制約には3つのステップが必要です:
- null許容列を追加
- すべての行に値を列に入力します
-
NOT NULL
を追加します 列への制約
または、「ダミー」のデフォルト値を使用することで、2つのステップで実行できます(「ダミー」の値を浮かび上がらせないように注意するか、意味のある/十分に文書化された値を使用してください):
- 列を
NOT NULL DEFAULT ''
として追加します (または、たとえば0
を使用します 数値タイプの場合) - すべての行に値を列に入力します
オプションで、テーブルを再度変更して、DEFAULT
を削除できます。 価値。個人的には、最初の方法を好みます。これは、テーブルに無意味な値を導入せず、2番目のステップで問題が発生した場合にエラーをスローする可能性が高いためです。私はかもしれない 列が特定の自然なDEFAULT
に適している場合は、2番目の方法を使用します 値と私はそれをファイナルテーブルの定義に保持する予定です。
さらに、クエリを正しくパラメータ化していない。 パラメータ値をメソッドに渡す必要があります メソッド呼び出し内で文字列引数をフォーマットするのではなく。言い換えれば:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!