Alembic: Migraciones de base de datos con Python y SQLAlchemy

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción

El desarrollo de aplicaciones web modernas está inevitablemente ligado a la evolución de la estructura de la base de datos. Agregar nuevas tablas, cambiar tipos de datos, crear índices y modificar relaciones entre entidades — todo esto requiere un enfoque sistemático de gestión. Realizar cambios manuales en el esquema de la base de datos conlleva errores, pérdida de datos e inconsistencias entre los diferentes entornos de desarrollo.

Alembic es una potente herramienta para gestionar migraciones de bases de datos, diseñada específicamente para el ecosistema de SQLAlchemy. Es la solución oficial que permite realizar cambios seguros y controlados en la estructura de la base de datos, facilitando a los desarrolladores el seguimiento del historial de cambios, la aplicación de actualizaciones y, si es necesario, la reversión de modificaciones fallidas.

¿Qué es Alembic?

Alembic es una biblioteca para gestionar migraciones de bases de datos en proyectos Python que utilizan SQLAlchemy. Proporciona herramientas para crear, aplicar y revertir cambios en el esquema de la base de datos de forma controlada.

Principales ventajas de Alembic

Versionado del esquema de la base de datos — cada cambio se registra como una migración independiente con un identificador único, lo que permite rastrear la evolución de la estructura de datos.

Generación automática de migraciones — posibilidad de crear archivos de migración basados en los cambios en los modelos ORM de SQLAlchemy, lo que acelera significativamente el proceso de desarrollo.

Seguridad en las operaciones — todos los cambios se aplican dentro de transacciones, minimizando el riesgo de dañar los datos.

Soporte para múltiples bases de datos — funciona con PostgreSQL, MySQL, SQLite, Oracle y otras bases de datos compatibles con SQLAlchemy.

Instalación y configuración de Alembic

Instalación del paquete

pip install alembic

Para trabajar con aplicaciones asíncronas, también necesitarás instalar dependencias adicionales:

pip install alembic[asyncio]

Inicialización del proyecto de migraciones

Después de la instalación, debes inicializar la estructura del proyecto:

alembic init alembic

El comando creará la siguiente estructura de archivos:

alembic/
├── versions/           # Directorio para los archivos de migración
├── env.py             # Configuración del entorno
├── script.py.mako     # Plantilla para generar migraciones
└── alembic.ini        # Archivo de configuración principal

Configuración de la conexión a la base de datos

En el archivo alembic.ini se especifica la cadena de conexión a la base de datos:

sqlalchemy.url = postgresql://usuario:contraseña@localhost/nombre_bd

Alternativamente, la conexión se puede configurar mediante programación en el archivo env.py:

from sqlalchemy import create_engine
from myproject.config import DATABASE_URL

config.set_main_option("sqlalchemy.url", DATABASE_URL)

Integración con SQLAlchemy

Conexión de modelos

Para que la autogeneración de migraciones funcione correctamente, debes especificar los metadatos de los modelos en el archivo alembic/env.py:

from myproject.models import Base

# Especificamos los metadatos para la autogeneración
target_metadata = Base.metadata

Ejemplo de modelo básico

from sqlalchemy import Column, Integer, String, DateTime, Boolean
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    username = Column(String(50), unique=True, nullable=False)
    email = Column(String(100), unique=True, nullable=False)
    is_active = Column(B                    

Recommendations