溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django-migrate報錯怎么辦

發(fā)布時間:2020-08-01 11:46:53 來源:億速云 閱讀:234 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了Django-migrate報錯怎么辦,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

python3 manage.py makemigrations # 生成數(shù)據(jù)庫遷移文件
python3 manage.py migrate # 遷移數(shù)據(jù)庫

簡簡單單兩條命令就完成了django的數(shù)據(jù)庫遷移

但是今天一天的時間都耽誤在這了,一點(diǎn)都不夸張的那種,,早上去公司討論需求之后,研究了一下需要更改一下數(shù)據(jù)庫,在執(zhí)行makemigrations的時候OK沒有問題,但是migrate就報錯了

1.報錯: XX表已經(jīng)存在,django.db.utils.OperationalError: (1050, "Table XX already exists

    我:刪表,但是報錯,Cannot delete or update a parent row: a foreign key constraint fails 跟YY表存在外鍵關(guān)系,無法刪除,

    百度了一番之后:1、SET foreign_key_checks = 0; // 先設(shè)置外鍵約束檢查關(guān)閉

            2、drop table XX; // 刪除數(shù)據(jù),表或者視圖

            3、SET foreign_key_checks = 1; // 開啟外鍵約束檢查,以保持表結(jié)構(gòu)完整性 

2.表刪了之后重新執(zhí)行migrate,又報錯別的表存在,如此一直循環(huán)往復(fù),我都懷疑這是人家寫的一個while True,

    我:找到了第二種解決方案:python manage.py migrate myapp --fake # 切記把myapp換成你要執(zhí)行的APP名稱

    這條命令可以順利執(zhí)行,沒有報錯,但是又找不到對應(yīng)生成的表在哪里,頂如還是說不能成功

3.將之前執(zhí)行makemigrations生成的migrations文件夾刪除,重新來過,OK,還是一樣的毛病,

4.重新創(chuàng)建了database之后,重新來過,只生成了django自帶的那幾張表,然而項(xiàng)目里大多的數(shù)據(jù)存儲都是依靠我在每一個app里創(chuàng)建的table里呀

5.將每個APP下的migrations都刪掉,database也重新來過,好嘛,連最基本的數(shù)據(jù)庫遷移文件夾都不能生成了,一瞬間有種悔不當(dāng)初的感覺,但是又能怎么樣呢,就是需要調(diào)整數(shù)據(jù)庫呀

6.這個時候重頭開始來過,千萬不要慌,檢查settings里是否把每一個APP都注冊到,項(xiàng)目同名目錄下的__init__.py里是否包含了

            import pymysql

            pymysql.install_as_MySQLdb()

7.沒有問題之后這樣去執(zhí)行數(shù)據(jù)庫遷移的命令 

python3 manage.py migrate # 生成django自帶的數(shù)據(jù)庫
python3 manage.py makemigrations appname # 將appname換成你要遷移的那個app的名稱
python3 manage.py migrate appname # 同理,換名

至此,一個小小的問題,真的就花了我一天的時間,好在終于解決了,

以上就是關(guān)于Django-migrate報錯怎么辦的內(nèi)容,如果你們有學(xué)習(xí)到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI