Crear migraciones para la base de datos en Django 5
Ahora bien, vamos a crear una migración para poder seguir con la entrada anterior, en la cual vimos la creación de un modelo en Django.
Lo primero que te puedes preguntar seria...
¿Qué es una migración?
En términos generales, ya que este mismo esquema lo emplean otros frameworks modernos como Laravel, CodeIgniter 4 y Flask; podríamos ver una migración como simplemente un esquema que va a hacer mapeado en la base de datos que tengamos configurada, en la misma generalmente indicamos como está descrita una tabla.
Las migraciones son una manera incremental que tenemos para actualizar el esquema o como esta formada la base de datos; con incremental quiero decir que podemos ir agregando más migraciones a medida que vayamos desarrollando el proyecto y tienen un orden secuencial en que se ejecuten que es directamente proporcional al orden en el cual creamos las mismas.
Ventajas de la migración
Las migraciones tienen una ventaja enorme con respecto al esquema tradicional en la cual la definición del a base de datos en tarea aparte; con las migraciones podemos tener un control total sobre las tablas que tengamos definida en la base de datos y por lo tanto estamos creando otra capa entre la base de datos y nuestro proyecto como tal en la cual tenemos el control total sobre la estructura de la base de datos.
Con las migraciones es muy fácil compartir a otros integrantes del proyecto tu esquema de trabajo, ya que simplemente puedes pasar el archivo o migración para que tu compañero o compañeros de trabajo puedan emplear el mismo esquema que tú; ya no es necesario que cada quien cree la base de datos de manera manual si no mediante nuestro propio framework.
Así que, ya sabes para qué son las migraciones y su ventaja enorme en comparación con otros esquemas; así que vamos a ir a nuestro proyecto en Django para crear las migraciones.
Los modelos y las migraciones
Recuerda nuevamente tener configurada tu base de datos, registrada la aplicación (o aplicaciones) que cuenta con el o los modelos y creado al menos un modelo en dicha app; cosa que hicimos anteriormente; ya que, las migraciones se generan a partir de la definición que tengamos en el modelo.
Generar una migración
Para crear una migración en Django, nada más fácil, ya lo tenemos todo gratis al momento de crear un proyecto en Django; simplemente tenemos que ejecutar el siguiente comando desde tu terminal, a la altura de las carpetas de las aplicaciones (dentro de la carpeta del proyecto):
python manage.py makemigrations
O correr las migraciones por aplicación:
python manage.py makemigrations firstApp
En cualquier caso, verás una salida como la siguiente:
python manage.py makemigrations firstApp Migrations for 'firstApp': firstApp\migrations\0001_initial.py - Create model Emplyoee
En la cual ya tenemos la migración creada; por lo tanto, tenemos una carpeta llamada migrations dentro de la aplicación firstApp
y dentro de l misma, la migración correspondiente.
Aquí tu eres libre de personalizar ciertos aspectos de la misma antes de que Django traduzca esto a SQL para luego crear la tabla en la base de datos configurada; aunque generalmente NO es necesario hacer ningún cambio extra.
Ejecutar la migración anterior
Para ejecutar la migración anterior simplemente tenemos que ejecutar el siguiente comando:
python manage.py migrate
Y con esto se van a ejecutar una serie de migraciones, y no solo la tuya, ya que, para cada aplicación que tengas instalado aunque sea por defecto en Django, las mismas tienen migracions creadas y por lo tanto ya están listas para ser mapeadas a la base de datos con el comando anterior:
Operations to perform: Apply all migrations: admin, auth, contenttypes, firstApp, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_NULL... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying firstApp.0001_initial... OK Applying sessions.0001_initial... OK
Y con esto, si revisamos en la base de datos:
Tenemos nuestra. Tabla o tablas creada en caso de que tuvieses más de una migración o modelo definido.
Volver a ejecutar migraciones
Puedes ejecutar cualquiera de los comandos anteriores nuevamente:
python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, firstApp, sessions Running migrations: No migrations to apply.
Pero verás que no pasa nada, ya que Django detecta que ya no tiene que crear una migración, ya que la misma fue creada y fue ejecutada en la base de datos y traducida con la tabla en nuestra base de datos que vimos anteriormente; te puedes preguntar cómo sabe Django que la tabla existe; pues básicamente por la otra tabla que se creó llamada:
Que básicamente guarda registros de las migraciones que se hallan ejecutada en nuestra base de datos; en este punto puedes crear nuevas aplicaciones y modelos, o definir mas modelos o cambiar los ya existente y en cualquier punto crear y ejecutar las migraciones.
Conclusiones
Las migraciones son un componente muy potente que existen en este tipos de frameworks; nos permiten modificar y agregar o alterar la estructura de los modelos para que luego podamos reflejar estos cambios en nuevas migraciones y a posterior en la base de datos.
Recuerda los tres pasos para trabajar las migraciones:
- Cambiar los modelos (en models.py).
- Ejecutar el comando python manage.py makemigrations para crear migraciones para esos cambios
- Ejecutar el comando python manage.py migrate para aplicar esos cambios a la base de datos.
Recuerda que cada comando hace una operación en específico y debe de seguir el orden correspondiente para que todo te funcione y puedas ver los cambios reflejados.
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter