少し更新したい古いデータベースがあります。
古いデータベースには、DEFAULT や NOT NULL などの列制約がなく、コードで (不十分に) 処理されていました。新しいデータベースでは、クライアント側のコードを削除して sqlite に処理させることができるように、必要に応じてこれらの制約を追加しました。
問題は、NULL 値が問題なく転送されるか、NOT NULL 制約の場合にエラーがスローされる遷移です。
私の質問は、あるテーブルから別のテーブルに値を転送し、すべての NULL 値を新しい列のデフォルト値に変更するにはどうすればよいですか?
現在、これは私の(Python)コードです:
self.cursor.execute("CREATE TEMP TABLE tmp_%s AS SELECT * FROM %s" % (table, table))
self.cursor.execute("DROP TABLE %s" % table)
self.cursor.execute("CREATE TABLE IF NOT EXISTS %s (%s)" % (table, get_columns(table)))
self.cursor.execute("INSERT INTO %s SELECT * FROM tmp_%s" % (table, table))
self.cursor.execute("DROP TABLE tmp_%s" % table)
データベースには多くのテーブルがあるため、指定されたテーブル名から sql を作成するヘルパー関数です。