1

我正在使用南数据迁移将数据从一个表移动到另一个表(在 django 应用程序之间)

它按预期移动所有数据,但问题是它不是复制主键(ID),而是创建一个新的(在新表中)有意义..

但是我怎样才能使一个新表相同,包括 id 字段(这是默认值,未在模型中定义)

使用 mysql

4

2 回答 2

3

部分使用创建表,将旧表中的所有内容插入新表LIKE。部分只是删除新表forwardsbackwards

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')

希望有帮助。

于 2013-08-09T21:29:46.263 回答
1

有两种基本方法可以做你想做的事情:

  1. 编写多步迁移。
  2. 循环遍历行并设置 ID。

我认为第二个更容易,尽管我不确定您要做什么。如果你已经在写类似的东西

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()
  1. 编写将 A 复制到 B 的数据迁移
  2. 编写一个架构迁移,使 B.id 成为 primary_key 并删除 fake_id
于 2013-08-09T21:36:47.850 回答