Alexander A. E. Full Stack Developer

Django Apps: South

Se me ha dado por iniciar una revisión de algunas de las aplicaciones que uso en conjunto con django, lo que me permitirá de algún modo no solo el transmitir conocimiento, sino también afianzar lo que sé, ya que para redactar los artículos deberé de leer un tanto de la documentación (a modo de repaso).

Iniciaré con south, una aplicación que nos permite realizar migraciones de datos en nuestros proyectos/aplicaciones.

¿Qué es una migración?

Se refiere al cambio del esquema de la base de datos de una versión a otra. Por ejemplo:

  • El añadir un nuevo modelo(tabla) a nuestra aplicación.
  • El añadir o remover un campo de nuestro modelo.
  • El cambiar uno de los atributos de alguna tabla por ejemplo de null=False a null=True
  • Como nos indican en la documentación, para south una migración incluye el crear el esquema inicial de nuestra base de datos.

¿Por qué debo usar south?

  • south puede leer automáticamente los cambios que hemos realizado en nuestra base de datos y crear con un simple comando ingresado la migración necesaria. (en caso de conflictos, requerirá intervención del usuario por medio de algún mensaje)

  • Al igual que el ORM de Django, es independiente del motor de base de datos a usar, esto quiere decir que no obtendremos problemas si usamos sqlite, mysql o postgresql. A la fecha1, el soporte para Microsoft SQL Server y Oracle estan en fase beta y alfa respectivamente.

  • Permite manejar cada aplicación de manera independiente, es decir, podemos escoger que aplicaciones serán manejadas por south y cuales lo serán por medio del ya conocido 'syncdb'.

  • South esta diseñado para detectar y advertirnos sobre conflictos introducidos por algún colaborador del proyecto mediante el sistema de control de versiones.

Instalación

Existen muchas maneras de instalar south, por medio de easy_install, pip, clonando la última versión del repositorio en mercurial, alguno de los paquetes descargables que nos otorgan o tal vez mediante el gestor de paquetes de nuestra distribución linux preferida (en el caso de que se incluyese south allí).

Mi método preferido2 es por medio de pip ya que lo uso en conjunto con los entornos virtuales de virtualenv. Entonces por medio de pip, lo instalamos por medio de la siguiente instrucción:

pip install south

Y para nuestro proyecto en django añadimos 'south', a la relación de aplicaciones instaladas (INSTALLED_APPS).

Tutorial

En la documentación de south podemos encontrar un tutorial muy detallado sobre el uso de south, a continuación, un muy breve resumen:

Un nuevo proyecto en django con south

Por ejemplo, supongamos que estamos desarrollando un nuevo proyecto al que llamaremos ingeniosamente southTest con la aplicación testapp, la cual está enfocada a la administración de libros de una biblioteca.

Uno de los modelos de nuestra aplicación es el modelo libro, que contiene el título y el autor ambos como campos de texto.

  • Lo primero a realizar es crear la primera migración de nuestra aplicación, lo cual podemos realizar con el comando

    ./manage.py schemamigration testapp --initial
    
  • Con esto se debe de haber creado un directorio en nuestra aplicación conteniendo la migración inicial, tal y como se muestra en la siguiente imagen:

proyecto: estructura

Antes de realizar la migración debemos de sincronizar la base de datos. Debido a que existe una migración para la aplicación 'testapp', el comando syncdb creará solo las tablas que están fuera de nuestra aplicación y nos indicará también cuales son las aplicaciones que estan o no administradas por south.

proyecto-syncdb

y tal como nos indica. ejecutamos la orden:

    ./manage.py migrate

con lo que se crea la única tabla de nuestro aplicación, la cual podemos observar desde el admin de django (en caso de haber registrado nuestro modelo)

admin: Libro

  • Después de ingresar algunos libros, nos piden que la aplicación también deba de ser capaz de registrar los capítulos por cada libro, por lo que añadimos el modelo correspondiente:

proyecto-models

creamos la migración con una variación del comando que usamos por primera vez y ejecutamos la migración:

    ./manage.py schemamigration testapp --auto
    ./manage.py migrate

a partir de este momento, cada nuevo cambio en el esquema de nuestra aplicación requerirá generalmente la ejecución de los dos comandos anteriores.

Con esto doy por terminado3 este exageradamente pequeño tutorial, que lo que pretende es mostrar el uso de los comandos básicos de south, y que generalmente son los únicos que usaremos (espero realizar en algún momento una segunda parte con un uso más complejo de south).


  1. South Database API 

  2. pip junto a easy_install son los métodos recomendados de instalación. 

  3. Repositorio en bitbucket del proyecto de ejemplo 

Comentarios !

comments powered by Disqus