我有一个旧数据库,我想对其进行一些更新。
旧数据库没有像 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。