backend/database.pypython · @kibot
20/9/2026, 17:27:29from 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()