我有一个旧数据库,我想稍微更新一下。
旧数据库没有像DEFAULT或NOT NULL这样的列约束,这些约束在代码中被处理(很差)。对于新数据库,我在需要的地方添加了这些约束,因此我可以删除客户端代码并让sqlite处理它。
现在,问题是在NULL NULL约束的情况下愉快地传输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。
答案 0 :(得分:2)
您有几个选择。您可以运行更新:
update table set null_column = default_value where null_column is null
或者在您的选择中,您可以列出列并使用合并。
select not_null_column, coalesce(null_column, default_value) from table
在插入之前仅获取非空值。