Django重置migrations檔案的方法步驟

2022-10-04 17:36:13 字數 2670 閱讀 9571

django開發過程中如果資料庫變動過多導致migrations的檔案越來越多,管理起來很不方便, 幸運的是django提供了一種方式可以是這些檔案重置到0001狀態,而且不刪除原有資料。

確認migration檔案跟資料庫同步

$ python3 manage.py makemigrations

如果提示 no changes detected 那麼資料就是同步的。

檢視當前migration檔案記錄

$ python3 manage.py showmigrations

admin

[x] 0001_initial

[x] 0002_logentry_remove_auto_add

[x] 0003_logentry_add_action_flag_choices

程式設計客棧auth

[x] 000程式設計客棧1_initial

[x] 0002_alter_permission_name_max_length

[x] 0003_alter_user_email_max_length

[x] 0004_alter_user_username_opts

[x] 0005_alter_user_l程式設計客棧ast_login_null

[x] 0006_require_contenttypes_0002

[x] 0007_alter_validators_add_error_messages

[x] 0008_alter_user_username_max_length

[x] 0009_alter_user_last_name_max_length

[x] 0010_alter_group_name_max_length

[x] 0011_update_proxy_permissions

contenttypes

[x] 0001_initial

[x] 0002_remove_content_type_name

isite

[x] 0001_initial

[x] 0002_article_pub_date

sessions

[x] 0001_initial

重置檔案

python3 manage.py migrate --fake mysite zero # mysite是app的名稱

刪除migrations的處init.py的其他檔案

重新生產migrate檔案

$ python3 manage.py makemigrations

同步到資料庫

python3 manage.py migrate --fake-initial

operations to perform:

apply all migrations: admin, auth, contenttypes, isite, sessions

running migrations:

applying isite.0001_initial... faked

fake是假冒偽裝的意思。執行過程,但不應用資料。

這些就清爽多了。

場景一不考慮資料庫資料,可以完全清空資料庫。

步驟:刪除所有migrations

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

find . -path "*/migrations/*.pyc" -delete

刪除資料庫

重新生成migrations

python manage.py makemigrations

python manage.py migrate

場景二有時候我們會直接匯入完整的資料庫,包括資料,這種情況下就不能簡單的清空資料庫。

這時我們的目的就是:清空資料庫的migration history,保證以後的migrate能正常使用,但要保留其他資料。

步驟:從資料庫中刪除所有非0001_initial的migration history

delete from django_migrations where app in ('your','app',程式設計客棧'labels') and name != '0001_initial'

使用migrate命令回滾0001_initial的migration history

python manage.py migrate --fake your zero

python manage.py migrate --fake app zero

python manage.py migrate --fake labels zero

重新生成0001_initial,如果能保證已有0001_initial已是最新的,可跳過www.cppcns.com此步

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

find . -path "*/migrations/*.pyc" -delete

python manage.py makemigrations

在資料庫中生成新的0001_initial記錄

python migrate --fake-initial

本文標題: django重置migrations檔案的方法步驟

本文位址:

重置mysql 密碼 mysql重置密碼

ubuntu下重置mysql的root密碼 sudo vi etc mysql my.cnf,在 mysqld 段中加入一行 skip grant tables sudo service mysql restart,重啟mysql服務 sudo mysql u root p mysql,用空密碼進入...

mysql id重置密碼 mysql 重置密碼

mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...

mysql 重置密碼 mysql 重置密碼

mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...