django 刪除數(shù)據(jù)庫表后重新同步
原創(chuàng)2017年07月03日 10:25:53
標簽:
1811
由于項目需要奔则,最近在用基于Python語言的一個后端框架Django開發(fā)web應(yīng)用。不得不說啥刻,Django繼承了Python的簡潔性秃殉,用它來開發(fā)web應(yīng)用簡單清爽坝初,不同于從前的SSH框架,需要單獨配置每個框架钾军,還需要通過配置將各個框架集合起來鳄袍,Django就集成了SSH三個框架的功能,只需要配置好這一個框架吏恭,整個后端開發(fā)流程全部可以完成拗小,并且配置過程簡單易學(xué),這就大大降低了程序員的使用復(fù)雜度樱哼,可以將更多的精力集中于寫出好的代碼哀九,而不是糾結(jié)于工具的使用。
閑言少敘搅幅,現(xiàn)在就來說一說我遇到的問題和解決方案阅束。
我們都知道Django提供了ORM的功能,可以通過操作代碼中的類直接創(chuàng)建數(shù)據(jù)庫表以及進行增刪改查茄唐。但是在開發(fā)過程中息裸,由于數(shù)據(jù)庫表的重新設(shè)計,需要刪除原表,并通過Django的ORM功能重新同步表呼盆。
同步命令如下:
[plain]view plaincopy
python?manage.py?makemigrations
[plain]view plaincopy
python?manage.py?migrate
但是在我輸入命令之后報錯了:
提示說我新增的字段沒有默認值(我對數(shù)據(jù)庫表的修改就是增加了一個字段)年扩,然后我去百度,在stackoverflow上找到了答案访圃,在該字段后增加一個默認值即可厨幻。但是明顯這個答案沒有找到我遇到問題的真正原因,因為這樣做第一條命令成功執(zhí)行腿时,但是到第二條時就直接報錯况脆。然后我又去百度,有人建議看一下框架自動生成的initial文件圈匆,該文件在當前app下的migrations目錄下,打開后發(fā)現(xiàn)該文件內(nèi)容和原表對應(yīng)捏雌,也就是并沒有更新跃赚,問題可能就在這了。于是我按照建議刪除了這個文件重新生成性湿。
刪除文件之后重新執(zhí)行命令纬傲,這次確實生成了新的initial文件,內(nèi)容也已經(jīng)更新肤频,但是執(zhí)行第二條命令時還是出了問題叹括,查看數(shù)據(jù)庫,空空如也宵荒,沒有產(chǎn)生新表汁雷。崩潰。
然后又去百度报咳,找相關(guān)問題看侠讯,看到另外一條命令:
[plain]view plaincopy
python?manage.py?sqlmigrate?your_app_name?0001
把your_app_name換成自己的app名字即可看到框架自動生成的創(chuàng)建表sql語句,于是我就這樣看到了sql語句暑刃。我直接在數(shù)據(jù)庫中執(zhí)行了該句sql命令手動創(chuàng)建了表厢漩,再啟動應(yīng)用,可以正常啟動岩臣,問題解決溜嗜。
雖然這個方法有些取巧吧,似乎還是沒有解釋問題的癥結(jié)所在架谎,但好在很實用地解決了問題炸宵。