在学习南方的过程中,我犯了一些错误,我想重新思考。这是其中之一:
# migrate --list
(*) 0002_auto__add_lesson #add the table
(*) 0003_auto__del_lesson #dammit, table uses wrong db engine so delete it
(*) 0004_auto__add_lesson #recreate the table
显然,如果他们已加星标,我可以直接执行第4步,第2步和第3步:
./migrate my_app 0004
但是,由于步骤2和3是冗余的并且不需要运行,是否可以简单地删除它们?此外,我应该添加我担心有人可能只是运行迁移,然后删除表(和任何数据),然后重新创建它...
提前致谢,
答案 0 :(得分:4)
这里有两个注意事项。
首先,如果您已经运行了迁移,那么它将被记录在数据库中,如果您只删除一个文件而不是遇到问题:您的数据库将引用不存在的迁移。有一个解决方案:使用./manage.py migrate my_app 0001
向后运行迁移2和3,然后删除迁移文件。如果您无法迁移回来(例如,您手动搞砸了数据库),那么您可以假装使用./manage.py migrate my_app 0001 --fake
迁移回来并设置数据库,因为它应该是手动的。假意表示不会进行任何模式更改,但会删除运行迁移的注释。
其次,您推送了代码并且其他人已经运行了您的迁移。在这种情况下,您需要创建一个新的迁移,恢复您使用2和3完成的任何操作。这样,任何人都可以通过运行新的迁移来恢复不需要的更改。