feat: autoayuno-api (FastAPI) — alimentos (OFF) y recetas
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
36
db.py
Normal file
36
db.py
Normal file
@@ -0,0 +1,36 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user