Cody Blog

Django 修改 Model 之後要如何更新到 Database

Django 如果 Model裡面的欄位有更動時,即使執行

$ python manage syncdb

是不會更動已經存在的 database 的 Table。

在這StackOverflow討論串有提到像是用 South等Migration Tool,但如果Model只是新增一些Optional的欄位時,這真的是用牛刀了。裡面有提到另一個方法,我覺得還不錯簡單,在此記錄一下:

先用 dumpdata 這個指令把DB的資料先輸出成 .json 的格式。要注意的事,這時侯 model.py 必需是舊的 schema

$ python manage.py dumpdata <APP_NAME> >> /tmp/old_data.json

然後先把資料清掉

$ python manage.py sqlclear <APP_NAME> | python manage.py dbshell

此時就可以修改 models.py 修改欄位,執行 syncdb

$ python manage.py syncdb

最後再把 json 格式的 data 載入回來即可

$ python manage.py loaddata temp_data.json