South es una app de django que permite modificar la estructura de la base de datos de una aplicación django cuando cambiamos el modelo (models.py).
El comando syncdb sólo crea nuevas tablas, pero no modifica tablas existentes, así que si en el modelo de una aplicación renombramos un campo de una tabla existente syncdb no realizará ese cambio en la base de datos. A este tipo de cambios en la base de datos se les denomina «migración del esquema» y es de lo que se encarga South.
Instalación
- pip install south
- Agregar «south» a INSTALLED_APPS
- Ejecutar syncdb antes de crear nuestros propios modelos. Está será la última (y única) vez, que necesitamos ejecutar este comando
manage.py syncdb
Usar south en un una app nueva
- Crear la aplicación, y empezar a rellenar el models.py
- Crear el script de migración inicial
python manage.py schemamigration app_name --initial
- Hacer los cambios en la bbdd
python manage.py migrate app_name
Usar south en una app ya creada
python manage.py convert_to_south app_name
En el caso de que haya otros desarrolladores en el equipo y cada cual esté usando su propia instancia de la base de datos, el resto de desarrolladores deberá migrar la primera versión en modo fake,
python manage.py migrate app_name 0001 --fake
el resto normal, así:
python manage.py migrate app_name
De lo contrario no podrán migrar su versión de la base de datos.
Migración de modelos
- Modificamos el models.py de nuestra aplicación
- Crear un nuevo script de migración
python manage.py schemamigration app_name --auto
- Aplicar la migración a la bbdd
python manage.py migrate app_name
Como funciona
Se puede decir que South funciona en varios niveles de abstracción disintos.
- Añade una tabla en la base de datos que mantiene el estado actual de la base de datos. Es decir, guarda que migraciones se han aplicado.
- Crea un directorio en la applicación, donde guarda para cada migración un fichero (script) con la información necesaria para realizarla
- Añade varios comandos al manage.py
Los ficheros de migración generados en deben subirse al repositorio para que el resto de los desarrolladores pueda también realizar la migración.
Referencias
Nota: Editado el 7/Marzo/2015 para añadir el comentario de Mauricio.
Comentarios
En el punto 2 de la migración de modelos ya existentes, en ubuntu la sintaxis es:
python manage.py schemamigration app_name –auto
Es decir, «–» en lugar de «-«
Gracias por la corrección Rafa. He actualizado el artículo y he marcado los comandos con Code Colorer para que se vea más claro.
tengo un problema , al momento de hacer syncdb me sale una exception de mysql , Incorrect string value: ‘\xE9rica …’ for column ‘Value» at row 1 , si alguien me puede ayudar …
Excelente el aporte, muchas gracias!
Yo mejoraría este párrafo:
«En el caso de que haya otros desarrolladores en el equipo y cada cual esté usando su propia instancia de la base de datos, el resto de desarrolladores ejecutará:
python manage.py migrate app_name –fake»
lo cambiaría por esto:
«En el caso de que haya otros desarrolladores en el equipo y cada cual esté usando su propia instancia de la base de datos, el resto de desarrolladores deberá migrar la primera versión en modo fake, el resto normal, así:
python manage.py migrate app_name 0001 –fake
python manage.py migrate app_name
De lo contrario no podrán migrar su versión de la base de datos.
http://south.readthedocs.org/en/latest/convertinganapp.html#converting-an-app
»
Saludos
Gracias Mauricio.
He añadido tus comentarios, la entrada es algo antigua así que puede que de ahí venga el error.
no entiendo del todo el beneficio de este app en la versión 1.9 de django
Enter comment here.