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