我更改了Django模型,并使用Django schemamigration更新数据库。但是,当我执行python manager.py migrate app时,它抛出以下错误消息:
_mysql_exceptions.OperationalError: (1050, "Table 'forum_user' already exists")发布于 2012-02-21 15:51:18
那么django south正在尝试创建的表已经存在,并且与数据库的状态不匹配。
如果这是第一次迁移,请记住,在进行模式迁移更改之前,必须通过schemamigration myapp --initial和migrate app --fake设置初始状态,使数据库与南数据库状态相匹配。
作为一种方便的方法,manage.py convert_to_south myapp也可以执行上述操作。
开始使用south..。
<代码>H112运行python manage.py模式迁移myapp --auto<代码>H213<代码>H114运行python manage.py迁移myapp<代码>H215<代码>G216
更新
请注意,django 1.7+附带迁移,south不再使用。
只有两个命令值得注意。
迁移迁移(handles --initial)
作者和南方是同一个人,众筹。去吧,姜戈。
发布于 2015-05-27 01:32:32
我只是在本地修复了一个重复的表问题,并希望记录我的工作流程以帮助其他人。
成功的关键是在添加新模型之前创建--empty迁移。流程:
schemamigration --auto再次添加表/模型并导致“已存在错误”。clear; python manage.py schemamigration --empty APPNAME MIGRATION_FILE_NAME运行空迁移。这将创建一个没有向前/向后命令的模型状态的“声明”。100%确保模型(python文件)和数据库的当前状态同步!此最新迁移将用于创建差异,以便正确迁移(next).clear; python manage.py schemamigration APPNAME --auto以创建真正所需的差异关闭(使用刚刚创建的--empty迁移)。新的迁移将具有适用于您的新模型的向前/向后命令。使用clear; python manage.py migrate关闭Review...
学到的教训是,--auto查看最后一个APP+migration文件来创建向前/向后差异。如果最后一次迁移的字典中没有您在DB中拥有的模型,它将被再次创建,从而导致“已存在”错误。可以把字典看作是Django和DB之间的一份合同,上面写着“一切都应该是这样的”。迁移可以包含创建重复表的命令,并且只会在`migrate命令期间暴露出来。
上面的信息应该可以解决这个问题。展示部分是为了帮助人们,也是为了在我做傻事的情况下进行审查。
https://stackoverflow.com/questions/9373871
复制相似问题