重复表(相同)包括主键 - 使用django south

时间:2013-08-09 20:34:14

标签: python django django-south database-migration

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

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

但是如何使新表格相同,包括id字段(默认情况下,未在模型中定义)

使用mysql

2 个答案:

答案 0 :(得分:3)

使用LIKE部分中的forwards创建表格,插入从旧表格到新表格的所有内容。在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')

希望有所帮助。

答案 1 :(得分:1)

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

  1. 编写多步迁移。
  2. 遍历行并设置ID。
  3. 我认为第二个更容易,但我不确定你要做什么。如果你已经写过类似

    的内容了
    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. 编写一个schemamigration,使B.id成为primary_key并删除fake_id