Download src/db/database.py from Alexis-Ravet/Employee-Churn-Prediction: direct link, hf CLI and curl.
- Browser
- Download file 1.62 kB
-
https://huggingface.co/spaces/Alexis-Ravet/Employee-Churn-Prediction/resolve/main/src/db/database.py
- Command line
-
hf download hf://spaces/Alexis-Ravet/Employee-Churn-Prediction/src/db/database.py
-
curl -L -o database.py https://huggingface.co/spaces/Alexis-Ravet/Employee-Churn-Prediction/resolve/main/src/db/database.py
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() | |