我有两个sqlite.db文件。我想将db文件表中一列的内容复制到另一列。
例如:
我在db文件中有一个名为new.db的模型信息:
class Information(models.Model):
info_id = models.AutoField(primary_key = True)
info_name = models.CharField( max_length = 50)
以及db文件中名为old.db的以下信息模型:
class Information(models.Model):
info_id = models.AutoField(primary_key = True)
info_type = models.CharField(max_length = 50)
info_name = models.CharField( max_length = 50)
我想将old.db列中的info_id和info_name中的所有数据复制到new.db中的info_id和info_name。
我在想这样的事情:
manage.py dbshell
然后
INSERT INTO "new.Information" ("info_id", "info_name")
SELECT "info_id", "info_name"
FROM "old.Information";
这似乎不起作用。它说new.Information表不存在......有什么想法吗?
答案 0 :(得分:6)
您需要将设置文件中的数据库URL切换到db2并运行syncdb以创建新表。之后,最简单的做法是切换回db1并运行./manage.py dumpdata myapp > data.json
,然后再转到db2,然后运行./manage.py loaddata data.json
。
之后,您可以从db2中删除不需要的数据。
编辑:另一种方法是使用sqlite中的ATTACH
函数。首先,我建议您执行上面的第一步(更改数据库设置并使用syncdb创建表),然后您可以切换回来执行此操作:
./manage.py dbshell
> ATTACH DATABASE 'new.db' AS newdb;
> INSERT INTO newdb.Information SELECT * FROM Information;
答案 1 :(得分:1)
Alex提到的附加方式更简单,更好,需要微调
INSERT INTO newdb.Information SELECT * FROM Information;
注意SELECT周围缺少括号,sqlite不接受它们。参考http://sqlite.org/lang_insert.html