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

在插入之前只获取非空值。

于 2013-09-21T15:45:49.767 回答