文章目录 migrate--fake: 迁移回滚/重新执行某一次迁移/伪回滚迁移(不执行相应的sql操作,仅修改执行状态标记) 模型重置可能遇到的问题 细节步骤 撤销最近
文章目录
- migrate&--fake: 迁移回滚/重新执行某一次迁移/伪回滚迁移(不执行相应的sql操作,仅修改执行状态标记)
- 模型重置可能遇到的问题
- 细节&步骤
- 撤销最近一次成功的迁移
- 场景实例(当前迁移情况)
- 回退效果
- 逆向fake
- 实操
- migrate 子命令手册
- fake&fake-initial
migrate&–fake: 迁移回滚/重新执行某一次迁移/伪回滚迁移(不执行相应的sql操作,仅修改执行状态标记)
- python - Rolling back to a previous migration in django - Stack Overflow
模型重置可能遇到的问题
如果您的其他代码已经引用了需要被重置的模型,这会稍微棘手一些,因为在您执行
makemigrations
的时候,会检查各个代码的依赖等是否正常,如果简单的删除模型,可能导致makemigrations无法完整执行
这样,就需要一步步将所有相关代码都注释掉,等到模型重置后,再将这些代码恢复(撤销屏蔽)
可能出现的地方有(将DRF一同考虑)
- urls.py
- serializer.py
- views.py
可以将这些文件都全部注释掉,模型重置完毕后,再解开注释
细节&步骤
- 使用
python manage.py showmigrations <appName>
查看当前迁移执行情况 - 回滚前,不要删除已有的migration(回滚要依赖于这些已经执行过的文件
- 执行回滚命令不建议使用别名(直接使用全拼命令行,保证所有参数都能够正确被manage.py接收到)
-
python manage.py migrate <appName> <00xxx(replace it with your target migration file name code>
- 重新使用
showmigrations
检查撤销情况
- 删除掉已经被撤销执行的migration.py文件
- 重新使用
showmigrations
检查撤销情况
- 现在将最新的模型代码进行迁移
- 执行
python manage.py makemigrations <appName>
- 以及
python manage.py migrate <appName>
- 如果全部成功,那么再次查看数据库(建议使用命令行,可以最及时和准确的查看刚刚迁移完毕的数据库)
撤销最近一次成功的迁移
场景实例(当前迁移情况)
# 执行迁移情况查看(当前的应用(django app)是user应用)
python manage.py showmigrations user
[X] 0013_alter_wordsearchhistory_spelling_and_more
[X] 0014_testforeignkey
[X] 0015_delete_wordstar
[X] 0016_wordstar
[X] 0017_alter_user_signupdate
[X] 0018_user_openid
[ ] 0019_alter_user_openid
- 现在,想要撤销掉最近一次成功的迁移(0018)
- 我们需要执行的是
python manage.py migrate 0017
- 类似于git的代码版本控制回滚那样,将指针移动到了
0017