【发布时间】:2013-08-11 21:17:36
【问题描述】:
我正在使用南数据迁移将数据从一个表移动到另一个表(在 django 应用程序之间)
它按预期移动所有数据,但问题是它没有复制主键 (ID),而是创建一个新的(在新表中)有意义..
但是我怎样才能使一个新表相同,包括 id 字段(这是默认的,未在模型中定义)
使用mysql
【问题讨论】:
标签: python django django-south database-migration
我正在使用南数据迁移将数据从一个表移动到另一个表(在 django 应用程序之间)
它按预期移动所有数据,但问题是它没有复制主键 (ID),而是创建一个新的(在新表中)有意义..
但是我怎样才能使一个新表相同,包括 id 字段(这是默认的,未在模型中定义)
使用mysql
【问题讨论】:
标签: python django django-south database-migration
有两种基本方法可以做你想做的事:
我认为第二个更容易,虽然我不确定你想要做什么。如果你已经在写类似的东西了
for a in A.objects.all():
b = B(attr1 = a.attr1, ...)
b.save()
那你就不能简单写
b = B(id = a.id, attr1 = a.attr1, ...)
如果您使用更自动的方式复制行,请考虑多步骤迁移方法: 1. 将模型 A 和 B 写成这样:
class A(model):
real_data = CharField()
class B(model):
real_data = CharField()
fake_id = IntegerField(primary_key=True)
id = IntegerField()
【讨论】:
在forwards 部分中使用LIKE 创建表,将旧表中的所有内容插入到新表中。在backwards 部分只需删除新表即可。
def forwards(self, orm):
db.execute("CREATE TABLE new_table LIKE old_table")
db.execute("INSERT new_table SELECT * old_table")
def backwards(self, orm):
db.drop_table('new_table')
希望对您有所帮助。
【讨论】: