Seguimiento de versión, automatizar los cambios al esquema DB con django


10

Actualmente estoy mirando el framework Python Django para futuras aplicaciones basadas en db, así como para un puerto de algunas aplicaciones actualmente escritas en PHP. Uno de los problemas más desagradables durante mis últimos años fue hacer un seguimiento de los cambios en el esquema de la base de datos y desplegar estos cambios en los sistemas productivos. No me atreví a pedirles que los deshaga también, pero por supuesto para probar y depurar eso sería una gran característica. De otras preguntas aquí (como this one o this one), puedo ver que no estoy solo y que este no es un problema trivial. Además, encontré muchas inspiraciones en las respuestas allí.

Ahora, como Django parece ser muy poderoso, ¿tiene alguna herramienta para ayudar con lo anterior? Tal vez es incluso en sus documentos y me lo perdí?

12

Existen al menos dos utilidades de terceros para gestionar las migraciones de esquema DB, South y Django Evolution. No he probado ninguna de las dos, pero he escuchado algunas cosas buenas sobre South, aunque Evolution ha durado un poco más.

Además, mira SchemaEvolution en la wiki de Django. Es solo una página wiki sobre la migración de la base de datos.

  0

South parece ser la mejor fecha, después de jugar con Django Evolution, creo que la migración de datos de South es la característica principal. No creo que Django Evolution tenga migración de datos todavía. only Schema Evelution 18 jun. 092009-06-18 02:59:31


2

Que yo sepa (versión 0.97), syncdb será capaz de añadir tablas para sincronizar el esquema de base de datos con el archivo models.py, pero no puede:

  • Cambiar nombre o añadir una columna en una poblada DB. Tienes que hacer eso a mano.
  • Refactorice su modelo (como dividir una tabla en dos) y vuelva a llenar su DB según corresponda.

podría ser posible, aunque para escribir un guión de Django para hacer la migración al jugar con los dos diferentes managers, pero que podría llevar años si su base de datos es grande.


0

Y ahora también está dmigrations. De announcement:

django-evolución intenta abordar este problema de manera inteligente, mediante la detección de cambios en los modelos que aún no se reflejan en el esquema de base de datos y averiguar lo que hay que hacer para que los dos vuelvan a estar sincronizados . En cambio, dmigrations adopta el enfoque estúpido: requiere que establezca explícitamente los cambios en una secuencia de migraciones, que se aplicarán a su vez para llevar una base de datos al estado más reciente que refleje los modelos subyacentes.

Esto significa trabajo adicional para los desarrolladores que crean migraciones, pero también hace que todo el proceso sea completamente transparente: para nuestros proyectos, decidimos elegir el sistema más simple que pudiera funcionar.

(Mi negrita)


0

oí mucho bien sobre Django Schema Evolution Branch y esos eran opions de usuarios reales. Funciona de inmediato y hace lo que debería hacer.


0

U debería buscar Dmigrations, funciona un poco diferente de django-eveoltions. Le muestra todo lo que está haciendo y, para cosas complicidas, le pide sus interposiciones. Debe ser genial.


1

Hubo una sesión de panel sobre los cambios de esquema DB en la reciente DjangoCon; hay un video of the session (gracias a Google), que debería proporcionar información útil sobre varias de estas utilidades.

  0

Niza sesión. Creo que decidí seguir con la evolución de django. 03 oct. 082008-10-03 17:15:23