South: Migraciones de Esquema en Django

La única cosa que envidio un poco de Rails cuando estoy usando Django son los migrations. Rails viene con un sistema para manejar los cambios en los esquemas de bases de datos, que hasta donde recuerdo estos “migrations” hay que escribirlos a mano.

Les presento a South un app para hacer migraciones de esquema y data para proyectos desarrollados en Django.

El problema que South soluciona es que cuando cambias un modelo, la base de datos tiene que cambiar su esquema para acomodar esos cambios. Así que la solución que existe es borrar la base de datos y crearla otra vez para que contenga los cambios. Obviamente esto es muy costoso en tiempo, no provee funcionalidad para volver a un esquema anterior y además muy poco elegante.

Con la funcionalidad basica de south puedes crear files de migración automaticamente cada vez que haces un cambio en tus “models” y una vez creado el file aplicar los cambios.

Comandos básicos

Una vez creados tus modelos iniciales, creas tu primera migración con

$./manage.py schemamigration NombreDelApp –initial

ya south habrá creado un directorio de migrations dentro del directorio del app. Ahora para aplicar este esquema a la base de datos solo hay que hacer

$./manage.py migrate NombreDelApp

Supongamos que luego de un tiempo hicimos cambios a nuestros modelos así que debemos crear un nuevo “migration”, para esto hacemos

$./manage.py schemamigration NombreDelApp –auto

y finalmente aplicamos esto nuevos cambios repitiendo

$./manage.py migrate NombreDelApp

Hasta ahora siempre he usado la opción de –auto en mis “migrations” y todo ha salido como esperaba. Supongo que en algún momento me voy a encontrar con una situación donde el “migration” que genera automáticamente no funciona. Pero afortunadamente estos files son simplemente archivos de código python. Así que puedo sentarme y escribir el archivo a mano si fuese necesario.