# Gu铆a de Migraciones con Alembic Este proyecto usa Alembic para manejar las migraciones de base de datos. ## 馃搵 Comandos 脷tiles ### Dentro del contenedor Docker ```bash # Acceder al contenedor docker exec -it control_mve_api bash # Crear una nueva migraci贸n autom谩ticamente alembic revision --autogenerate -m "descripci贸n del cambio" # Aplicar migraciones pendientes alembic upgrade head # Revertir 煤ltima migraci贸n alembic downgrade -1 # Ver historial de migraciones alembic history # Ver estado actual alembic current ``` ### Desde el host (sin entrar al contenedor) ```bash # Crear nueva migraci贸n docker exec -it control_mve_api alembic revision --autogenerate -m "descripci贸n" # Aplicar migraciones docker exec -it control_mve_api alembic upgrade head # Ver historial docker exec -it control_mve_api alembic history ``` ## 馃殌 Flujo de Trabajo ### 1. Modificar modelos Edita tus modelos en `app/models/`: ```python # Ejemplo: agregar un nuevo campo class Cliente(Base): __tablename__ = "clientes" # ... campos existentes ... nuevo_campo = Column(String(100)) ``` ### 2. Generar migraci贸n autom谩tica ```bash docker exec -it control_mve_api alembic revision --autogenerate -m "agregar campo nuevo_campo a clientes" ``` Esto crear谩 un archivo en `alembic/versions/` con los cambios detectados. ### 3. Revisar la migraci贸n generada **IMPORTANTE**: Siempre revisa el archivo generado antes de aplicarlo. ```bash # Ver el archivo m谩s reciente ls -lt alembic/versions/ | head -n 2 ``` ### 4. Aplicar la migraci贸n ```bash docker exec -it control_mve_api alembic upgrade head ``` ### 5. Verificar que se aplic贸 ```bash docker exec -it control_mve_api alembic current ``` ## 馃攧 Migraci贸n Inicial La migraci贸n inicial ya se ejecuta autom谩ticamente cuando levantas los contenedores gracias al script `migrate.sh`. Si necesitas recrear la migraci贸n inicial: ```bash # Eliminar migraciones existentes rm alembic/versions/*.py # Crear migraci贸n inicial docker exec -it control_mve_api alembic revision --autogenerate -m "migraci贸n inicial" # Aplicarla docker exec -it control_mve_api alembic upgrade head ``` ## 馃摑 Ejemplos Comunes ### Agregar un nuevo modelo 1. Crear archivo en `app/models/nueva_entidad.py` 2. Importarlo en `app/models/__init__.py` 3. Generar migraci贸n: `alembic revision --autogenerate -m "agregar modelo NuevaEntidad"` 4. Revisar y aplicar: `alembic upgrade head` ### Modificar un campo existente 1. Editar el modelo 2. Generar migraci贸n: `alembic revision --autogenerate -m "modificar campo X"` 3. **Revisar migraci贸n** - Alembic no siempre detecta todos los cambios 4. Aplicar: `alembic upgrade head` ### Crear migraci贸n manual Si necesitas hacer cambios que Alembic no detecta autom谩ticamente: ```bash docker exec -it control_timbres_api alembic revision -m "mi cambio manual" ``` Luego edita el archivo generado en `alembic/versions/`: ```python def upgrade() -> None: op.execute("UPDATE clientes SET estado = 'activo' WHERE estado IS NULL") def downgrade() -> None: pass ``` ## 鈿狅笍 Buenas Pr谩cticas 1. **Siempre revisa** las migraciones autogeneradas antes de aplicarlas 2. **Prueba en desarrollo** antes de aplicar en producci贸n 3. **Haz backup** de la base de datos antes de migraciones importantes 4. **Escribe downgrades** funcionales para poder revertir cambios 5. **Commits peque帽os** - una migraci贸n por cambio l贸gico 6. **Nombres descriptivos** para las migraciones ## 馃敡 Troubleshooting ### La migraci贸n no detecta mis cambios - Verifica que importaste el modelo en `app/models/__init__.py` - Aseg煤rate de que `alembic/env.py` importa todos los modelos - Reinicia el contenedor: `docker-compose restart api` ### Error: "Target database is not up to date" ```bash # Ver qu茅 migraciones faltan docker exec -it control_mve_api alembic current docker exec -it control_mve_api alembic history # Aplicar pendientes docker exec -it control_mve_api alembic upgrade head ``` ### Quiero empezar de cero ```bash # CUIDADO: Esto borra todos los datos docker-compose down -v docker-compose up -d ``` ## 馃摎 Recursos - [Documentaci贸n oficial de Alembic](https://alembic.sqlalchemy.org/) - [Tutorial de Alembic](https://alembic.sqlalchemy.org/en/latest/tutorial.html)