重置Django migration的常见方式

根据django官方文档建议,开发过程当中会把生成的migrations提交到git中。因为各类缘由,会有一些场景须要重置migrations,故总结一些经常使用场景及解决办法。python

场景一

不考虑数据库数据,能够彻底清空数据库。mysql

步骤:git

  1. 删除全部migrationssql

    find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
    find . -path "*/migrations/*.pyc"  -delete
  2. 删除数据库
  3. 从新生成migrationsshell

    python manage.py makemigrations
    python manage.py migrate

场景二

有时候咱们会直接导入完整的数据库,包括数据,这种状况下就不能简单的清空数据库。
这时咱们的目的就是:清空数据库的migration history,保证之后的migrate能正常使用,但要保留其余数据。数据库

步骤:django

  1. 从数据库中删除全部非0001_initial的migration historyapp

    DELETE FROM django_migrations WHERE app IN ('your','app','labels') AND name != '0001_initial'
  2. 使用migrate命令回滚0001_initial的migration historycode

    python manage.py migrate --fake your zero
    python manage.py migrate --fake app zero
    python manage.py migrate --fake labels zero
  3. 从新生成0001_initial,若是能保证已有0001_initial已经是最新的,可跳过此步开发

    find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
    find . -path "*/migrations/*.pyc"  -delete
    
    python manage.py makemigrations
  4. 在数据库中生成新的0001_initial记录

    python migrate --fake-initial

相关文章
相关标签/搜索