En este tema, aprenderemos cómo gestionar las migraciones de base de datos en una aplicación Flask utilizando Flask-Migrate. Las migraciones de base de datos son esenciales para mantener la estructura de la base de datos sincronizada con el código de la aplicación a medida que evoluciona.

¿Qué es Flask-Migrate?

Flask-Migrate es una extensión que utiliza Alembic para gestionar las migraciones de base de datos en aplicaciones Flask que usan SQLAlchemy. Permite crear, aplicar y revertir cambios en la estructura de la base de datos de manera controlada y reproducible.

Instalación de Flask-Migrate

Para comenzar, necesitamos instalar Flask-Migrate. Puedes hacerlo utilizando pip:

pip install Flask-Migrate

Configuración de Flask-Migrate

Una vez instalado, debemos configurar Flask-Migrate en nuestra aplicación Flask. A continuación, se muestra un ejemplo de cómo hacerlo:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

# Definición de un modelo de ejemplo
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

if __name__ == '__main__':
    app.run(debug=True)

En este ejemplo:

  • Configuramos la URI de la base de datos.
  • Inicializamos SQLAlchemy y Flask-Migrate.
  • Definimos un modelo de ejemplo llamado User.

Creación de Migraciones

Para crear una migración, utilizamos el comando flask db migrate. Este comando genera un script de migración basado en los cambios detectados en los modelos de SQLAlchemy.

flask db migrate -m "Initial migration."

El parámetro -m permite agregar un mensaje descriptivo a la migración.

Aplicación de Migraciones

Una vez creada la migración, debemos aplicarla a la base de datos utilizando el comando flask db upgrade:

flask db upgrade

Este comando aplica todos los cambios pendientes a la base de datos.

Reversión de Migraciones

Si necesitamos revertir una migración, podemos utilizar el comando flask db downgrade:

flask db downgrade

Este comando revierte la última migración aplicada. Podemos especificar un número de versión para revertir a una migración específica.

Ejemplo Práctico

Supongamos que queremos agregar un nuevo campo age al modelo User. Primero, actualizamos el modelo:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    age = db.Column(db.Integer)  # Nuevo campo

Luego, creamos una nueva migración y la aplicamos:

flask db migrate -m "Add age field to User model."
flask db upgrade

Ejercicio Práctico

Ejercicio 1: Agregar un Campo a un Modelo

  1. Agrega un nuevo campo bio (tipo String) al modelo User.
  2. Crea una migración para este cambio.
  3. Aplica la migración a la base de datos.

Solución

  1. Actualiza el modelo User:

    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
        age = db.Column(db.Integer)
        bio = db.Column(db.String(200))  # Nuevo campo
    
  2. Crea la migración:

    flask db migrate -m "Add bio field to User model."
    
  3. Aplica la migración:

    flask db upgrade
    

Resumen

En esta sección, hemos aprendido cómo utilizar Flask-Migrate para gestionar las migraciones de base de datos en una aplicación Flask. Hemos cubierto la instalación, configuración, creación, aplicación y reversión de migraciones, así como un ejemplo práctico y un ejercicio para reforzar los conceptos aprendidos. Con estas herramientas, puedes mantener la estructura de tu base de datos sincronizada con los cambios en tu código de manera eficiente y controlada.

Curso de Desarrollo Web con Flask

Módulo 1: Introducción a Flask

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados