Alexis-Ravet's picture
Upload folder using huggingface_hub
b666236 verified
Raw
History Blame Contribute Delete
1.62 kB
"""
Configuration de la connexion à la base de données PostgreSQL.
Utilise SQLAlchemy comme ORM et lit l'URL depuis le fichier .env.
Si DATABASE_URL n'est pas définie (ex: conteneur Docker sans PostgreSQL),
le module ne génère pas d'erreur. Les fonctions de logging détecteront
l'absence de DB et fonctionneront en mode dégradé.
"""
import logging
import os
from dotenv import load_dotenv
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, sessionmaker
logger = logging.getLogger(__name__)
# Charge les variables d'environnement depuis le fichier .env
load_dotenv()
# URL de connexion à la base de données
DATABASE_URL = os.getenv("DATABASE_URL")
if DATABASE_URL is None:
logger.warning(
"DATABASE_URL n'est pas définie. "
"La base de données ne sera pas disponible. "
"L'API fonctionnera sans logging en base de données."
)
engine = None
SessionLocal = None
else:
# Engine SQLAlchemy = connexion vers PostgreSQL
engine = create_engine(DATABASE_URL)
# SessionLocal = fabrique de sessions (une session = une transaction DB)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Base = classe de base pour tous les modèles ORM
class Base(DeclarativeBase):
pass
def get_db():
"""
Générateur qui fournit une session de base de données.
Yields:
Session SQLAlchemy ou None si la DB n'est pas configurée
"""
if SessionLocal is None:
yield None
return
db = SessionLocal()
try:
yield db
finally:
db.close()