重置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

相關文章
相關標籤/搜索