在 Django 中重置遷移
Vaibhav Vaibhav
2023年1月30日
2021年6月29日
在使用資料庫時,我們經常不得不重置資料庫,因為我們用無用的資料填充它。有時,我們甚至會根據容易出錯的資料庫架構來設定資料庫。有時,我們甚至會改變業務邏輯,從而調整整個資料庫設計。這些情況在電腦科學領域很常見,並且已經構建了一些很好的工具和命令來處理它們。
在 Django 中,如果我們最終遇到任何此類情況,我們必須重置遷移和資料庫。重置遷移時,列表中有幾個選項。
- 重置整個資料庫
- 將 Django 應用恢復到一些舊的遷移
在 Django 中重置整個資料庫
當我們必須在 Django 中重置整個資料庫時,列表中有幾個選項。
- 如果我們使用 Django 的預設 SQLite 資料庫,我們可以刪除資料庫檔案
db.sqlite3
,然後刪除所有應用程式中的所有migrations
資料夾。刪除migrations
資料夾後,我們可以重新進行遷移並使用兩個命令遷移它們;即,python manage.py makemigrations
和python manage.py migrate
。 - 如果我們使用的是其他一些關聯式資料庫,例如 PostgreSQL 或 MySQL,我們可以使用資料庫管理工具(例如
pgAdmin
、DBeaver
等)或使用命令列手動刪除所有表。或者,我們可以建立一個全新的資料庫,然後將其連線到我們的 Django 專案。請注意,對於這兩種情況,首先應刪除所有migrations
資料夾,然後重新進行遷移,最後再遷移它們。 - 另一種選擇是使用 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
。
Author: Vaibhav Vaibhav