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...