| """ |
| 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__) |
|
|
| |
| load_dotenv() |
|
|
| |
| 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 = create_engine(DATABASE_URL) |
| |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
|
|
|
|
| |
| 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() |
|
|