Migraciones en Django 1.7+

Crear migraciones

./manage.py makemigrations polls

Mediante la ejecución de makemigrations, le estás diciendo a Django que has hecho algunos cambios a sus modelos y que desea que los cambios se almacenarán como la migración.

Las migraciones son cómo almacena Django cambios a sus modelos (y por tanto el esquema de base de datos) - son simplemente los archivos en el disco. Puedes leer la migración para su nuevo modelo si se quiere; que es el archivo polls/migrations/0001_initial.py . No te preocupes, no se espera para leerlos cada vez que Django hace uno, sino que están diseñados para ser humano editable en caso de que quiera ajustar manualmente cómo Django cambia las cosas.

Ver SQL que generara

Para ver el SQL que generara cuando cree la db, usar sqlmigrate.

Por ejemplo para ver 0001_initial.py 0002_auto_20140808_1242.py, solo poner el premer numero 0001 o 0002

Nota

Esto no genera la base de datos, solo muestra el SQL que generara cuando se haga migrate

./manage.py sqlmigrate polls 0001

Comprobar el modelo

Esto solo comprueba si hay algun error en el modelo, pero no ejecuta nada.

./manage.py check

Migrar las base de datos

./manage.py migrate

El comando migrate toma todas las migraciones que no han sido aplicadas (pistas de Django cuáles se aplican mediante una tabla especial en su base de datos llamada django_migrations ) y les va en contra de su base de datos - en esencia, la sincronización de los cambios realizados en sus modelos con el esquema en la base de datos.

Las migraciones son muy potentes y permiten cambiar tus modelos con el tiempo, a medida que desarrolle su proyecto, sin la necesidad de eliminar la base de datos o las tablas y hacer otros nuevos - que se especializa en la actualización de su base de datos en vivo, sin perder datos. Recordamos la guía de tres pasos para hacer cambios en el modelo:

  • Cambiar los modelos (en models.py ).

  • Ejecutar python manage.py makemigrations para crear migraciones de esos cambios

  • Ejecutar python manage.py migrate para aplicar esos cambios a la base de datos.

Limpiar migraciones

Hacer primero un backup de la base de datos y un commit en Git MUY RECOMENDABLE

Si se han echo muchos cambios en el modelo, sobre todo en las primeras etapas del proyecto, quizá sea bueno limpiar tanto las tabla django_migrations como el directorio app/migrations/

Eliminar la tabla django_migrations

psql -U nombre_usuario nombre_db

DROP TABLE IF EXISTS django_migrations;

\q

Eliminar los directorios app/migrations/, ir al directorio raíz del proyecto y ejecutar.

find ./ -type d -name "migrations" -exec rm -rf {} \;

Crear migraciones con makemigrations de las apps en el proyecto. Esta parte se ha de hacer por cada app.

./manage.py makemigrations app1
./manage.py makemigrations app2
./manage.py makemigrations appX

Restablecer.

./manage.py migrate --fake-initial