我更改了Django模型,并使用Django schemamigration
更新数据库。但是,当我执行python manager.py migrate app
时,它会抛出此错误消息:
_mysql_exceptions.OperationalError: (1050, "Table 'forum_user' already exists")
答案 0 :(得分:26)
然后django south尝试创建的表已经存在且与数据库的状态不匹配。
如果这是您第一次迁移,请记住在进行模式迁移更改之前,必须通过schemamigration myapp --initial
和migrate app --fake
设置初始状态,以使数据库与南数据库状态相匹配。
manage.py convert_to_south myapp
也可以将上述内容作为一种便捷方法。
注意django 1.7+附带迁移,而南方不再使用。
只有两个命令值得注意..
由南方同一作者撰写,众人资助。去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``命令期间公开。
以上信息应解决问题。部分是为了帮助人们,也是为了我在做一些愚蠢的事情时进行审查。