【问题标题】:Django: migrate Table 'forum_user' already existsDjango:迁移表'forum_user'已经存在
【发布时间】:2012-03-11 13:05:50
【问题描述】:

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

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

【问题讨论】:

  • 那么 django south 尝试创建的表已经存在并且与您的数据库状态不匹配。如果这是您第一次迁移,请记住,在进行 schemamigration 更改之前,您必须设置初始状态和 migrate app --fake 以将数据库与南数据库状态匹配
  • 如何设置初始状态?

标签: django django-south migrate


【解决方案1】:

那么 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

更新

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

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

  • manage.py makemigrations(句柄 --initial)
  • manage.py 迁移

与 South 由同一作者撰写,众筹。去 Django。

【讨论】:

  • 这值得更多的投票,有价值的信息和真正的帮助。
  • 阅读了多个教程后,您的答案是帮助我解决问题的答案。谢谢。
【解决方案2】:

我刚刚在本地解决了重复表问题,并想记录我的工作流程以帮助其他人。

成功的关键是在添加新模型之前创建--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+migration 文件以创建向前/向后差异。如果最后一次迁移在字典中没有您在 DB 中拥有的模型,它将再次创建,从而导致“已经存在”错误。将字典视为 Django 和 DB 之间的合同,说明“这就是一切应该是什么样子”。迁移可以包括创建重复表的命令,并且只会在 ```migrate`` 命令期间公开。

以上信息应该可以解决问题。呈现部分是为了帮助人们,也为了防止我做一些愚蠢的事情而进行审查。

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 2018-04-07
    • 2020-03-03
    • 2015-09-01
    • 1970-01-01
    • 2015-10-17
    • 2017-07-09
    • 2015-11-16
    • 2015-04-28
    相关资源
    最近更新 更多