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:
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.
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:
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:
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 campoLuego, creamos una nueva migración y la aplicamos:
Ejercicio Práctico
Ejercicio 1: Agregar un Campo a un Modelo
- Agrega un nuevo campo
bio(tipoString) al modeloUser. - Crea una migración para este cambio.
- Aplica la migración a la base de datos.
Solución
-
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 -
Crea la migración:
flask db migrate -m "Add bio field to User model." -
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
- ¿Qué es Flask?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Flask
- Entendiendo la Estructura de una Aplicación Flask
Módulo 2: Conceptos Básicos de Flask
- Enrutamiento y Mapeo de URLs
- Manejo de Métodos HTTP
- Renderizando Plantillas con Jinja2
- Trabajando con Archivos Estáticos
Módulo 3: Formularios y Entrada de Usuario
Módulo 4: Integración de Bases de Datos
- Introducción a Flask-SQLAlchemy
- Definiendo Modelos
- Realizando Operaciones CRUD
- Migraciones de Base de Datos con Flask-Migrate
Módulo 5: Autenticación de Usuarios
- Registro de Usuarios
- Inicio y Cierre de Sesión de Usuarios
- Hashing de Contraseñas
- Gestión de Sesiones de Usuario
Módulo 6: Conceptos Avanzados de Flask
- Blueprints para Aplicaciones Grandes
- Manejo de Errores
- Páginas de Error Personalizadas
- Registro y Depuración
Módulo 7: APIs RESTful con Flask
- Introducción a las APIs RESTful
- Creación de Endpoints RESTful
- Manejo de Datos JSON
- Autenticación para APIs
Módulo 8: Despliegue y Producción
- Configuración de Flask para Producción
- Despliegue en Heroku
- Despliegue en AWS
- Monitoreo y Optimización del Rendimiento
Módulo 9: Pruebas y Mejores Prácticas
- Pruebas Unitarias con Flask
- Pruebas de Integración
- Cobertura de Pruebas
- Mejores Prácticas para el Desarrollo con Flask
