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