django: update database schema without losing data

纵饮孤独 提交于 2019-11-30 07:32:50
James Khoury

When south isn't an option I just manually write scripts for small changes. and big ones i use

./manage.py dumpdata appname

http://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model

Throw that into a file. Run a regex replace to update any added /removed fields and then a reset of that app is possible. I have to admit i haven't done this in a while but i can get some specific code to do this for you if needed.

it loads back up with loaddata

edit

Django dump data for a single model? This Question is similar and might have the info i was talking about.

Still let me know if you need and i'll dig up my old script (or write out a nice simple one) for you.

UPDATE

./manage.py dumpdata appname --indent=4 > appname.json

#open your fav text editor and do a find/replace 

./manage.py reset appname
./manage.py loaddata appname.json

That should do it. When you do a find replace you only need to remove fields that you don't have any more and add fields that aren't nullable. (as a minimum).

Notes: the --indent=4 nicely formats everything for you. It means 4 spaces. the ./manage.py reset only works in pre django 1.3 (gah!) in django 1.3 you will have to do a ./manage dbshell and drop table. The sql for that is found from command ./manage.py sqlreset appname.

Django 1.7 has built-in migrations support.

See https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!