Estoy considerando usar Django para un proyecto que estoy comenzando (fyi, un juego basado en navegador) y una de las características que más me gusta es usar syncdb
para crear automáticamente las tablas de la base de datos basado en los modelos de Django que defino (una característica que no puedo encontrar en ningún otro marco). ya estaba pensando que esto era demasiado bueno para ser verdad cuando vi esto en el documentation:Alterar las tablas de la base de datos en Django
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.
Parece que la modificación de las tablas existentes tendrá que hacerse "a mano".
Lo que me gustaría saber es la mejor manera de hacerlo. Se me ocurren dos soluciones:
- Como lo sugiere la documentación, realice los cambios manualmente en el DB;
- Haga una copia de seguridad de la base de datos, límpiela, cree las tablas nuevamente (con syncdb, ya que está creando las tablas desde cero) e importe los datos respaldados (esto puede llevar demasiado tiempo si la base de datos es grande)
¿Alguna idea?
django-evolution parece funcionar bien, gracias! Vale la pena señalar que uno debe comenzar a usarlo desde el principio (no calcula los cambios necesarios del SQL existente). – gatoatigrado