1

少し更新したい古いデータベースがあります。

古いデータベースには、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 を作成するヘルパー関数です。

4

1 に答える 1

2

いくつかのオプションがあります。次のいずれかで更新を実行できます。

update table set null_column = default_value where null_column is null

または、選択で列をリストして合体を使用できます。

select not_null_column, coalesce(null_column, default_value) from table

null 以外の値のみを取得するために挿入する前に。

于 2013-09-21T15:45:49.767 に答える