sumaq/backend/app/migrate.py

49 lines
1.3 KiB
Python

import os
from dotenv import load_dotenv
from sqlalchemy import create_engine, text
from alembic import command
from alembic.config import Config
# Cargamos variables de entorno
load_dotenv()
# Construimos la URL de conexión
DATABASE_URL = os.getenv("DATABASE_URL")
if not DATABASE_URL:
DATABASE_URL = (
f"postgresql://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}"
f"@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}"
)
# Configuración de Alembic
alembic_cfg = Config("alembic.ini")
# Limpiar alembic_version huérfana si existe
engine = create_engine(DATABASE_URL)
with engine.connect() as conn:
result = conn.execute(
text(
"SELECT EXISTS ("
"SELECT 1 FROM information_schema.tables "
"WHERE table_name='alembic_version'"
")"
)
)
exists = result.scalar()
if exists:
print("⚠️ Tabla alembic_version existente detectada. Eliminando...")
conn.execute(text("DROP TABLE alembic_version"))
conn.commit()
# Crear migración automáticamente
print("🛠️ Generando migración...")
command.revision(alembic_cfg, message="crear tablas", autogenerate=True)
# Aplicar migración
print("⬆️ Aplicando migración (upgrade head)...")
command.upgrade(alembic_cfg, "head")
print("✅ Migración completada correctamente")