Django makemigrations migrate執(zhí)行成功但不創(chuàng)建數(shù)據(jù)庫(kù)表的解決
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)文章
Python實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解
這篇文章主要介紹了Python實(shí)現(xiàn)時(shí)鐘顯示,需要的朋友可以參考下2018-04-04Flask進(jìn)階之構(gòu)建RESTful?API和數(shù)據(jù)庫(kù)交互操作
這篇文章主要為大家介紹了Flask進(jìn)階之構(gòu)建RESTful API和數(shù)據(jù)庫(kù)交互操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Python實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Python實(shí)現(xiàn)的爬取網(wǎng)易動(dòng)態(tài)評(píng)論操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的爬取網(wǎng)易動(dòng)態(tài)評(píng)論操作,結(jié)合實(shí)例形式分析了Python針對(duì)網(wǎng)易評(píng)論正則爬取及json格式數(shù)據(jù)轉(zhuǎn)換、提取等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06使用python-docx在word文檔中查找書(shū)簽,并在書(shū)簽處寫(xiě)入數(shù)據(jù)方式
使用python-docx庫(kù),可在Word文檔中查找書(shū)簽并寫(xiě)入數(shù)據(jù)。首先打開(kāi)文檔,通過(guò)bookmarks屬性獲取書(shū)簽對(duì)象,然后使用書(shū)簽名定位書(shū)簽位置,最后將數(shù)據(jù)寫(xiě)入書(shū)簽處。這種方法適合自動(dòng)化填充Word模板等場(chǎng)景2024-09-09python如何在pygame中設(shè)置字體并顯示中文詳解
再簡(jiǎn)單的游戲界面中均涉及文字處理,下面這篇文章主要給大家介紹了關(guān)于python如何在pygame中設(shè)置字體并顯示中文的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01python3利用Dlib19.7實(shí)現(xiàn)人臉68個(gè)特征點(diǎn)標(biāo)定
這篇文章主要為大家詳細(xì)介紹了python3利用Dlib19.7實(shí)現(xiàn)人臉68個(gè)特征點(diǎn)標(biāo)定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02python3+PyQt5+Qt Designer實(shí)現(xiàn)界面可視化
本文主要介紹了python3+PyQt5+Qt Designer實(shí)現(xiàn)界面可視化,Qt Designer,用鼠標(biāo)拖拖就能完成窗體設(shè)計(jì),感興趣的可以了解一下2021-06-06python棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的示例詳解
棧(Stack)是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu),具有眾多實(shí)際應(yīng)用,其中之一是使用棧來(lái)實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,將一個(gè)數(shù)字從一種進(jìn)制表示轉(zhuǎn)換為另一種進(jìn)制表示,本文將深入研究棧的原理,以及如何使用Python實(shí)現(xiàn)十進(jìn)制到二進(jìn)制、八進(jìn)制和十六進(jìn)制的進(jìn)制轉(zhuǎn)換,需要的朋友可以參考下2023-11-11