2011-03-10 74 views
0

我想写一个函数来删除sqlite中的列(因为有时我可能想删除太旧的列)。如何将整个列(包括数据类型)从sqlite表复制到使用python的另一个表中?

+0

是在同一个数据库中的其他表,还是不同的? – 2011-03-10 09:34:25

+0

目前尚不清楚你的模式是什么,但如果你必须定期删除“太旧”的列,你可能需要重新考虑你的模式设计。 – Keith 2011-03-10 10:00:38

+0

@Keith:我不知道OP在做什么,但常见的用例是升级应用程序。当模式在版本之间改变时,新版本需要有一个代码来适当地改变表格。 – 2011-03-10 11:59:16

回答

1

SQLite FAQ

SQLite的有限ALTER TABLE支持 ,你可以用它来添加列 表的末尾,或更改表的 名称。如果要在表格的 结构中更改 更复杂的更改,则必须重新创建 表格。您可以将现有数据 保存到临时表中,删除旧的 表,创建新表,然后将 中的数据从临时 表中复制回来。

例如,假设你有一个名为“T1”的列名“一”, “B”表 ,而“C”,并要 从该表中删除列“C”。该 以下步骤说明此 怎么可以这样做:

BEGIN TRANSACTION; 
    CREATE TEMPORARY TABLE t1_backup(a,b); 
    INSERT INTO t1_backup SELECT a,b FROM t1; 
    DROP TABLE t1; 
    CREATE TABLE t1(a,b); 
    INSERT INTO t1 SELECT a,b FROM t1_backup; 
    DROP TABLE t1_backup; 
    COMMIT; 
+0

更简单的方法是将ALTER TABLE重新命名为旧表,然后只复制一次数据并删除旧表。双重复制可能会导致更紧凑的数据库。 – 2011-03-10 11:54:49

相关问题