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 campo
Luego, 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