在 Django 中重置遷移

Vaibhav Vaibhav 2023年1月30日
  1. 在 Django 中重置整個資料庫
  2. 將 Django 應用程式恢復到其舊遷移
在 Django 中重置遷移

在使用資料庫時,我們經常不得不重置資料庫,因為我們用無用的資料填充它。有時,我們甚至會根據容易出錯的資料庫架構來設定資料庫。有時,我們甚至會改變業務邏輯,從而調整整個資料庫設計。這些情況在電腦科學領域很常見,並且已經構建了一些很好的工具和命令來處理它們。

在 Django 中,如果我們最終遇到任何此類情況,我們必須重置遷移和資料庫。重置遷移時,列表中有幾個選項。

  1. 重置整個資料庫
  2. 將 Django 應用恢復到一些舊的遷移

在 Django 中重置整個資料庫

當我們必須在 Django 中重置整個資料庫時,列表中有幾個選項。

  1. 如果我們使用 Django 的預設 SQLite 資料庫,我們可以刪除資料庫檔案 db.sqlite3,然後刪除所有應用程式中的所有 migrations 資料夾。刪除 migrations 資料夾後,我們可以重新進行遷移並使用兩個命令遷移它們;即,python manage.py makemigrationspython manage.py migrate
  2. 如果我們使用的是其他一些關聯式資料庫,例如 PostgreSQL 或 MySQL,我們可以使用資料庫管理工具(例如 pgAdminDBeaver 等)或使用命令列手動刪除所有表。或者,我們可以建立一個全新的資料庫,然後將其連線到我們的 Django 專案。請注意,對於這兩種情況,首先應刪除所有 migrations 資料夾,然後重新進行遷移,最後再遷移它們。
  3. 另一種選擇是使用 Django 的 manage.py 命令為我們清除整個資料庫。命令是 python manage.py flush。同樣,在使用此命令後,我們必須刪除所有 migrations 資料夾,然後進行新的遷移。

將 Django 應用程式恢復到其舊遷移

如果我們不必重置整個資料庫而是回滾特定 Django 應用程式的遷移,我們有兩種選擇。首先,我們可以將 Django 應用程式的當前遷移反向到一些舊遷移。其次,我們可以重置 Django 應用程式的所有遷移。

如果我們必須從最新的遷移(例如 0014)遷移回舊的遷移(例如 0008),我們可以使用以下命令。

python manage.py migrate AppName 0008
            --- OR ---
python manage.py migrate AppName 0008_migration_name

而且,如果我們必須重置 Django 應用程式的所有遷移,我們可以使用以下命令。

python manage.py migrate AppName zero

請注意,有時遷移可能是不可逆的。通常,當對 Django 模型進行了一些重大更改時,就會出現這種情況。當我們嘗試恢復到這樣的遷移時,Django 會引發一個 IrreversibleError

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.