2010-04-30 23 views
16

Tengo algunos modelos con los que estoy trabajando en una nueva instalación de Django. ¿Es posible cambiar los campos sin perder datos de la aplicación?Django: ¿Cambiar modelos sin borrar todos los datos?

Intenté cambiar el campo y ejecutar python manage.py syncdb. No hubo salida de este comando.

Renavigation a las páginas de administración para editar los modelos modificados causaba TemplateSyntaxErrors porque Django buscaba mostrar los campos que no existían en el archivo db.

Estoy usando SQLite.

Puedo eliminar el archivo db, luego volver a ejecutar python manage.py syncdb, pero eso es un poco molesto. Hay una mejor manera de hacerlo?

Respuesta

5

Deberá actualizar manualmente el esquema/diseño de la base de datos, si solo está hablando de agregar/eliminar columnas.

Si está intentando cambiar el nombre de una columna, deberá buscar otra.

Usted puede utilizar el comando python manage.py sql [app name] (http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname) para ver lo que el nuevo SQL debe ser similar, para ver qué columnas, de qué tipo/especificación de Django tendría que añadir, a continuación, ejecutar manualmente ALTER TABLE comandos correspondientes.

Existen algunas aplicaciones/proyectos que permiten una administración más sencilla de modelos/bases de datos, pero Django no es compatible con esto de manera original o por diseño.

+0

El libro django tiene una buena sección sobre esto. [link] http://www.djangobook.com/es/2.0/chapter10.html#Making%20Changes%20to%20a%20Database%20Schema [/ link] –

20

Django nunca altera una columna de base de datos existente. Syncdb creará tablas, pero no hace 'migraciones' como las encontradas en Rails, por ejemplo. Si necesita algo como eso, consulte Django South.

Ver the docs for syndb:

syncdb no alterará las tablas existentes

syncdb sólo creará tablas para los modelos que aún no se han instalado. Nunca emitirá sentencias ALTER TABLE para hacer coincidir los cambios realizados en una clase de modelo después de la instalación. Los cambios en las clases de modelos y los esquemas de la base de datos a menudo implican cierta ambigüedad y, en esos casos, Django tendría que adivinar los cambios correctos que debe realizar. Existe el riesgo de que se pierdan datos críticos en el proceso.

Si ha realizado cambios en un modelo y desea modificar las tablas de la base de datos para que coincidan, use el comando sql para mostrar la nueva estructura SQL y compárela con su esquema de tabla existente para resolver los cambios.

Debe cambiar los nombres de columna en su base de datos manualmente a través de las herramientas de administración que proporciona sqlite. He hecho esto con MySQL, por ejemplo, y dado que MySQL te permite cambiar los nombres de las columnas sin afectar tus datos, no hay problema.

8

Por supuesto que sí.
Echa un vistazo South

+0

Esto no está actualizado. – User

Cuestiones relacionadas