Django: update database schema without losing data

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.


Learning curve...

http://south.aeracode.org/

South was merged into django core at version 1.7.
There is now a native django feature for data migration on schema changes.

Tags:

Django

Syncdb