首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:迁移表'forum_user‘已存在

Django:迁移表'forum_user‘已存在
EN

Stack Overflow用户
提问于 2012-02-21 15:45:02
回答 2查看 8.5K关注 0票数 8

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

代码语言:javascript
复制
_mysql_exceptions.OperationalError: (1050, "Table 'forum_user' already exists")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-21 15:51:18

那么django south正在尝试创建的表已经存在,并且与数据库的状态不匹配。

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

作为一种方便的方法,manage.py convert_to_south myapp也可以执行上述操作。

开始使用south..。

  1. 确保django表与当前数据库表完全匹配--如果您计划添加或删除列,请将这些列注释掉。
  2. 运行python manage.py模式迁移myapp --initial
  3. 运行python manage.py迁移myapp --fake
  4. 更改您的django模型

<代码>H112运行python manage.py模式迁移myapp --auto<代码>H213<代码>H114运行python manage.py迁移myapp<代码>H215<代码>G216

更新

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

只有两个命令值得注意。

迁移迁移(handles --initial)

  • manage.py
  • manage.py

作者和南方是同一个人,众筹。去吧,姜戈。

票数 29
EN

Stack Overflow用户

发布于 2015-05-27 01:32:32

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

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

  • 合并到另一个排除模型信息的人员工作中locally.
  • normal schemamigration --auto再次添加表/模型并导致“已存在错误”。
  • 已通过以下方法解决:注释掉新模型并通过clear; python manage.py schemamigration --empty APPNAME MIGRATION_FILE_NAME运行空迁移。这将创建一个没有向前/向后命令的模型状态的“声明”。100%确保模型(python文件)和数据库的当前状态同步!此最新迁移将用于创建差异,以便正确迁移(next).
  • uncomment新模型并运行clear; python manage.py schemamigration APPNAME --auto以创建真正所需的差异关闭(使用刚刚创建的--empty迁移)。新的迁移将具有适用于您的新模型的向前/向后命令。使用clear; python manage.py migrate

关闭Review...

  • finish

学到的教训是,--auto查看最后一个APP+migration文件来创建向前/向后差异。如果最后一次迁移的字典中没有您在DB中拥有的模型,它将被再次创建,从而导致“已存在”错误。可以把字典看作是Django和DB之间的一份合同,上面写着“一切都应该是这样的”。迁移可以包含创建重复表的命令,并且只会在`migrate命令期间暴露出来。

上面的信息应该可以解决这个问题。展示部分是为了帮助人们,也是为了在我做傻事的情况下进行审查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9373871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档