Django:迁移表'forum_user'已经存在

时间:2012-02-21 07:45:02

标签: django django-south migrate

我更改了Django模型,并使用Django schemamigration更新数据库。但是,当我执行python manager.py migrate app时,它会抛出此错误消息:

_mysql_exceptions.OperationalError: (1050, "Table 'forum_user' already exists")

2 个答案:

答案 0 :(得分:26)

然后django south尝试创建的表已经存在且与数据库的状态不匹配。

如果这是您第一次迁移,请记住在进行模式迁移更改之前,必须通过schemamigration myapp --initialmigrate app --fake设置初始状态,以使数据库与南数据库状态相匹配。

manage.py convert_to_south myapp也可以将上述内容作为一种便捷方法。

开始使用南...

  1. 确保您的django表与您当前的数据库表完全匹配 - 如果您计划添加或删除列,请将其注释掉。
  2. 运行python manage.py schemamigration myapp --initial
  3. 运行python manage.py migrate myapp --fake
  4. 更改您的django模型
  5. 运行python manage.py schemamigration myapp --auto
  6. 运行python manage.py migrate myapp
  7. 更新

    注意django 1.7+附带迁移,而南方不再使用。

    只有两个命令值得注意..

    • manage.py makemigrations(handles --initial)
    • manage.py migrate

    由南方同一作者撰写,众人资助。去django。

答案 1 :(得分:0)

我刚刚在本地修复了一个重复的表格问题,并希望记录我的工作流程以帮助其他人。

成功的关键是在添加新模型之前创建--empty迁移。流程:

  • 在另一个人的工作中合并,排除了我在本地模型上的信息。
  • 普通schemamigration --auto再次添加了一个表/模型,导致"已存在错误"。
  • 通过评论新模型并通过clear; python manage.py schemamigration --empty APPNAME MIGRATION_FILE_NAME运行空迁移来解决此问题。这会创建一个"声明"没有前进/后退命令的模型状态100%确定模型(python文件)和数据库的当前状态是同步的!此最新迁移将用于创建正确迁移的差异(下一步)。
  • 取消注释新模型并运行clear; python manage.py schemamigration APPNAME --auto以创建真正的和所需的差异关闭(使用刚刚创建的--empty迁移)。新迁移将具有适合您的新模型的前向/后向命令。评论...
  • clear; python manage.py migrate
  • 结束

经验教训是--auto查看最后一个APP +迁移文件以创建前向/后向差异。如果最后一次迁移在字典中没有你在DB中拥有的模型,那么它将再次被创建,导致"已经存在"错误。把字典想象成Django和数据库之间的契约,说明"这里的一切应该是什么样的"。迁移可以包括创建重复表的命令,并且只会在```migrate``命令期间公开。

以上信息应解决问题。部分是为了帮助人们,也是为了我在做一些愚蠢的事情时进行审查。