Python 撤消或重置django中伪造的迁移
在我基于django-1.8.2的项目中,我遇到了一些迁移问题,所以我运行了命令Python 撤消或重置django中伪造的迁移,python,django,django-models,Python,Django,Django Models,在我基于django-1.8.2的项目中,我遇到了一些迁移问题,所以我运行了命令 python manage.py migrate --fake 但是它伪造了这个命令所要进行的所有迁移。但是现在,python manage.py migrate命令没有执行或应用任何迁移。我想撤消伪造的迁移,以便将迁移应用于数据库。我想将现有迁移应用于数据库。来自: 请注意,使用--false可能会使迁移状态表处于需要手动恢复才能正确运行迁移的状态 因此,我建议您只需从django_migrations表中删除
python manage.py migrate --fake
但是它伪造了这个命令所要进行的所有迁移。但是现在,python manage.py migrate
命令没有执行或应用任何迁移。我想撤消伪造的迁移,以便将迁移应用于数据库。我想将现有迁移应用于数据库。来自:
请注意,使用--false可能会使迁移状态表处于需要手动恢复才能正确运行迁移的状态
因此,我建议您只需从
django_migrations
表中删除伪造的迁移。对于每个应用程序,您可以将迁移伪造回伪造之前的位置
python manage.py migrate --fake myapp 00XX_last_migration
其中00XX\u last\u migration
是您为应用程序myapp
实际运行的最后一次迁移
或者,如果您尚未实际运行该应用程序的任何迁移:
python manage.py migrate --fake myapp zero
如果要查看所有应用程序的所有迁移,可以运行
python manage.py showmigrations
。从那里,您可以确定要回滚到哪个迁移。在2020年9月,Django v.3.0.8运行得非常好。我认为值得一提的是,如果伪造的迁移是在数字上,比如说0018
,那么您应该使用上一次真正的迁移运行上述命令,即eg0017
@jfunk,这向我建议,从0018
中减去一,得到0017
。但有可能,例如,您从0015
开始,并且-fake
标记为0016
、0017
和0018
。在这种情况下,您可能会伪造回0015
。打得好,我只是想澄清一下,您想回到上一个真实的位置,因为我刚刚遇到了这个问题,这并不明显。无论您是使用--false
还是手动添加/删除django_migrations
表中的行,文档中的警告都适用。这两种方法都可能导致数据库和django_迁移
表不同步,这可能很难解决。