2011-04-21 24 views
5

¿Cuál es la mejor solución si quiero actualizar (alterar) mi esquema de base de datos (agregar nuevos campos a tablas agregándolos solo a modelos django) sin perder datos en estas tablas? "syncdb" no los agrega, por supuesto, así que necesito sus consejos sobre cómo alterar las tablas sin eliminarlas y volver a crearlas con syncdb.django: actualizar esquema de base de datos sin perder datos

Gracias, Ignas

Respuesta

9

Cuando sur no es una opción, solo escribo guiones manualmente para pequeños cambios. y los grandes i utilizan

./manage.py dumpdata appname 

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

lanzamiento que en un archivo. Ejecute un reemplazo de expresiones regulares para actualizar cualquier campo agregado/eliminado y luego es posible restablecer esa aplicación. Tengo que admitir que hace mucho tiempo que no hago esto, pero puedo obtener un código específico para hacer esto por usted si es necesario.

se carga de nuevo con loaddata

edición

Django dump data for a single model? Esta pregunta es similar y puede tener la información que estaba hablando.

Aún así, avíseme si lo necesita y desenterraré mi antiguo guión (o escriba uno bonito y sencillo) para usted.

ACTUALIZACIÓN

./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 

Eso debería hacerlo. Cuando haces un reemplazo de búsqueda, solo necesitas eliminar los campos que ya no tienes y agregar campos que no admiten valores. (como mínimo).

Notas: el --indent = 4 formatea todo para usted. Significa 4 espacios. el restablecimiento de ./manage.py solo funciona en pre django 1.3 (gah!) En django 1.3 tendrás que hacer un ./manage dbshell y drop table. El sql para eso se encuentra desde el comando ./manage.py sqlreset appname.

+0

Es necesario tratar de jugar con él para familiarizarse, pero suena razonable. Por supuesto, si tienes el guión que mencionaste y puedes compartir, será bueno mirarlo antes de escribir el mío :) Pero definitivamente intentaré jugar con él, ¡gracias! –

+0

Supongo que está ejecutando linux? –

+0

Linux y Mac OS X. –

Cuestiones relacionadas