将NULL转换为默认值

时间:2013-09-21 15:41:32

标签: sqlite

我有一个旧数据库,我想稍微更新一下。

旧数据库没有像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。

1 个答案:

答案 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
在插入之前

仅获取非空值。