亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django makemigrations migrate執(zhí)行成功但不創(chuàng)建數(shù)據(jù)庫表的解決

 更新時間:2023年09月15日 14:51:55   作者:Harrytsz  
這篇文章主要介紹了Django makemigrations migrate執(zhí)行成功但不創(chuàng)建數(shù)據(jù)庫表的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Django makemigrations migrate執(zhí)行成功不創(chuàng)建數(shù)據(jù)庫表

問題描述

刪除 app/migrations/0001_initial.py 文件以后和 MySQL 數(shù)據(jù)庫中對應(yīng)的 app 表后,執(zhí)行以下命令成功,但是 MySQL 并不會創(chuàng)建新的 app 表

python manage.py makemigrations
python manage.py migrate
# 提示:No changes detected

問題原因

在 MySQL 數(shù)據(jù)庫中有一張 django_migrations 表, 這張表里面有創(chuàng)建表的記錄,刪除對應(yīng)的數(shù)據(jù)表記錄即可(注意:不用刪除整張 django_migrations 表):

在 MySQL 中執(zhí)行如下命令:

`delete from django_migrations where app='yourappname';`

然后回到 Django 中重新執(zhí)行:

python manage.py makemigrations appname
python manage.py migrate appname

刷新 MySQL 庫,即可看到新創(chuàng)建的數(shù)據(jù)表。

Django遷移的理解(migrate和makemigrations)

makemigrations的作用

當(dāng)執(zhí)行 python manage.py makemigrations 命令時,Django會檢索項目中models.py文件里的模型類,根據(jù)這些模型類來生成一些遷移文件,這些文件會出現(xiàn)在每個應(yīng)用(app)的migrations文件夾下,里面的文件名會類似于下方這樣

- 0001_initial
- 0002_some_change
- 0003_another_change
- 0004_undo_something

每一次執(zhí)行makemigrations,這些文件前面的編號會根據(jù)上一次的編號進(jìn)行遞增。

文件中記錄了本次執(zhí)行makemigrations時,應(yīng)用(app)下的模型類相較于上一次執(zhí)行命令(makemigrations)時的區(qū)別,如果是第一次執(zhí)行,那么就會是進(jìn)行初始化。

這些文件的作用是記錄每一次模型類變化的內(nèi)容,可以將這些遷移文件看作數(shù)據(jù)庫版本控制的記錄文件,每一次模型類的增加、修改、刪除都記錄在這些文件中,這樣我們可以將數(shù)據(jù)庫的變化恢復(fù)到某次遷移之前的樣子。

如果想將開發(fā)出來的項目給別人使用時,在別人的電腦上可以根據(jù)遷移文件快速構(gòu)建出和自己開發(fā)時同樣的數(shù)據(jù)庫表。

migrate的作用

執(zhí)行 python manage.py migrate 前,一般都需要使用makemigrations生成遷移文件(需要了解模型類有什么變化),然后根據(jù)這些遷移文件中的記錄的變化內(nèi)容應(yīng)用到數(shù)據(jù)庫中,使數(shù)據(jù)庫中的表能夠與當(dāng)前模型類對應(yīng)。

migrate可以將新的變化應(yīng)用到數(shù)據(jù)庫中,也可以將上一次的遷移撤銷或者還原到某次遷移之前的狀態(tài)

這種撤銷遷移的效果也可以自己手動來實(shí)現(xiàn),例如直接對遷移文件、模型類、數(shù)據(jù)庫表進(jìn)行修改,但是django中一個django_migrations表,這個表記錄了每個應(yīng)用(app)每一次的遷移記錄,如果手動刪除時沒有涉及到這個表的修改,那么便會出現(xiàn)一些錯誤。

撤銷book應(yīng)用的某次遷移

# migrate后面需要寫應(yīng)用名字,0002代表的是遷移文件前面的編號
python manage.py migrate books 0002

撤銷某個應(yīng)用的所有遷移

# 撤銷所有遷移時,使用zero來代替遷移文件編號
python manage.py migrate books zero

撤銷不是100%能夠成功的,有一些已經(jīng)應(yīng)用的改變是不可撤銷的,那么嘗試撤銷這種改變會引發(fā)

IrreversibleError異常,那么這種情況就需要自行解決了。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論