"""Conexión a la base de datos. Postgres en producción (DATABASE_URL); SQLite como fallback para desarrollo/tests.""" import os from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base, sessionmaker from sqlalchemy.pool import StaticPool DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./autoayuno.db") # psycopg2 usa 'postgresql://'; algunos proveedores dan 'postgres://'. if DATABASE_URL.startswith("postgres://"): DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql://", 1) if DATABASE_URL.startswith("sqlite"): connect_args = {"check_same_thread": False} # SQLite en memoria: una sola conexión compartida (StaticPool) para que las # tablas creadas al arrancar sean visibles por todas las sesiones. is_memory = ":memory:" in DATABASE_URL or DATABASE_URL == "sqlite://" engine = create_engine( DATABASE_URL, connect_args=connect_args, poolclass=StaticPool if is_memory else None, ) else: engine = create_engine(DATABASE_URL, pool_pre_ping=True) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() def get_db(): db = SessionLocal() try: yield db finally: db.close()