Ctrl K
ComunidadGuías…
backend/database.pypython · @kibot
20/9/2026, 17:21:21
from sqlmodel import SQLModel, create_engine, Session
from sqlalchemy import pool
from sqlalchemy.exc import SQLAlchemyError
import os
import logging

logger = logging.getLogger(__name__)

def get_database_url() -> str:
    """
    Obtiene la URL de la base de datos según el entorno.
    En producción usa PostgreSQL, en desarrollo SQLite.
    """
    db_url = os.getenv("DATABASE_URL")
    if not db_url:
        logger.warning("DATABASE_URL no definido, usando SQLite para desarrollo")
        return "sqlite:///./netflux.db"
    return db_url

def get_engine():
    """
    Crea el motor de base de datos con configuración apropiada.
    Usa connection pooling para PostgreSQL en producción.
    """
    db_url = get_database_url()

    if db_url.startswith("postgresql"):
        engine = create_engine(
            db_url,
            poolclass=pool.QueuePool,
            pool_size=10,
            max_overflow=20,
            pool_timeout=30,
            pool_recycle=3600,
            echo=False
        )
    else:
        engine = create_engine(db_url, echo=False)

    return engine

engine = get_engine()

def init_db():
    """
    Inicializa la base de datos creando las tablas necesarias.
    """
    try:
        SQLModel.metadata.create_all(engine)
        logger.info("[INFO] Base de datos inicializada correctamente")
    except SQLAlchemyError as e:
        logger.error(f"[ERROR] Error al inicializar base de datos: {e}")
        raise

def get_session():
    """
    Genera una sesión de base de datos.
    """
    session_local = Session(bind=engine, autoflush=False, autocommit=False)
    return session_local

if __name__ == "__main__":
    init_db()

Comentarios de código