1. 程式人生 > >django 刪除資料庫表後重新同步

django 刪除資料庫表後重新同步

由於專案需要,最近在用基於Python語言的一個後端框架Django開發web應用。不得不說,Django繼承了Python的簡潔性,用它來開發web應用簡單清爽,不同於從前的SSH框架,需要單獨配置每個框架,還需要通過配置將各個框架集合起來,Django就集成了SSH三個框架的功能,只需要配置好這一個框架,整個後端開發流程全部可以完成,並且配置過程簡單易學,這就大大降低了程式設計師的使用複雜度,可以將更多的精力集中於寫出好的程式碼,而不是糾結於工具的使用。

閒言少敘,現在就來說一說我遇到的問題和解決方案。

我們都知道Django提供了ORM的功能,可以通過操作程式碼中的類直接建立資料庫表以及進行增刪改查。但是在開發過程中,由於資料庫表的重新設計,需要刪除原表,並通過Django的ORM功能重新同步表。

同步命令如下:

python manage.py makemigrations

python manage.py migrate

但是在我輸入命令之後報錯了:

提示說我新增的欄位沒有預設值(我對資料庫表的修改就是增加了一個欄位),然後我去百度,在stackoverflow上找到了答案,在該欄位後增加一個預設值即可。但是明顯這個答案沒有找到我遇到問題的真正原因,因為這樣做第一條命令成功執行,但是到第二條時就直接報錯。然後我又去百度,有人建議看一下框架自動生成的initial檔案,該檔案在當前app下的migrations目錄下,開啟後發現該檔案內容和原表對應,也就是並沒有更新,問題可能就在這了。於是我按照建議刪除了這個檔案重新生成。

刪除檔案之後重新執行命令,這次確實生成了新的initial檔案,內容也已經更新,但是執行第二條命令時還是出了問題,檢視資料庫,空空如也,沒有產生新表。崩潰。

然後又去百度,找相關問題看,看到另外一條命令:

python manage.py sqlmigrate your_app_name 0001 

把your_app_name換成自己的app名字即可看到框架自動生成的建立表sql語句,於是我就這樣看到了sql語句。我直接在資料庫中執行了該句sql命令手動建立了表,再啟動應用,可以正常啟動,問題解決。

雖然這個方法有些取巧吧,似乎還是沒有解釋問題的癥結所在,但好在很實用地解決了問題。