1. 程式人生 > 程式設計 >Django-migrate報錯問題解決方案

Django-migrate報錯問題解決方案

python3 manage.py makemigrations # 生成資料庫遷移檔案
python3 manage.py migrate # 遷移資料庫

簡簡單單兩條命令就完成了django的資料庫遷移

但是今天一天的時間都耽誤在這了,一點都不誇張的那種,,早上去公司討論需求之後,研究了一下需要更改一下資料庫,在執行makemigrations的時候OK沒有問題,但是migrate就報錯了

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

    我:刪表,但是報錯,Cannot delete or update a parent row: a foreign key constraint fails 跟YY表存在外來鍵關係,無法刪除,

    百度了一番之後:1、SET foreign_key_checks = 0; // 先設定外來鍵約束檢查關閉

            2、drop table XX; // 刪除資料,表或者檢視

            3、SET foreign_key_checks = 1; // 開啟外來鍵約束檢查,以保持表結構完整性 

2.表刪了之後重新執行migrate,又報錯別的表存在,如此一直迴圈往復,我都懷疑這是人家寫的一個while True,

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

    這條命令可以順利執行,沒有報錯,但是又找不到對應生成的表在哪裡,頂如還是說不能成功

3.將之前執行makemigrations生成的migrations資料夾刪除,重新來過,OK,還是一樣的毛病,

4.重新建立了database之後,重新來過,只生成了django自帶的那幾張表,然而專案裡大多的資料儲存都是依靠我在每一個app裡建立的table裡呀

5.將每個APP下的migrations都刪掉,database也重新來過,好嘛,連最基本的資料庫遷移資料夾都不能生成了,一瞬間有種悔不當初的感覺,但是又能怎麼樣呢,就是需要調整資料庫呀

6.這個時候重頭開始來過,千萬不要慌,檢查settings裡是否把每一個APP都註冊到,專案同名目錄下的__init__.py裡是否包含了

            import pymysql

            pymysql.install_as_MySQLdb()

7.沒有問題之後這樣去執行資料庫遷移的命令 

python3 manage.py migrate # 生成django自帶的資料庫
python3 manage.py makemigrations appname # 將appname換成你要遷移的那個app的名稱
python3 manage.py migrate appname # 同理,換名

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。