欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

問(wèn)題描述

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

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

問(wèn)題原因

在 MySQL 數(shù)據(jù)庫(kù)中有一張 django_migrations 表, 這張表里面有創(chuàng)建表的記錄,刪除對(duì)應(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 庫(kù),即可看到新創(chuàng)建的數(shù)據(jù)表。

Django遷移的理解(migrate和makemigrations)

makemigrations的作用

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

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

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

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

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

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

migrate的作用

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

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

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

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

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

撤銷(xiāo)某個(gè)應(yīng)用的所有遷移

# 撤銷(xiāo)所有遷移時(shí),使用zero來(lái)代替遷移文件編號(hào)
python manage.py migrate books zero

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

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

總結(jié)

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

相關(guān)文章

最新評(píng)論