IT-Stock/app/database.py
maxsoch 8bb5c9406a Initial scaffold: gestion de stock IT pour le département IT
App FastAPI + SQLite + SQLModel + Jinja2 pour gérer le stock de matériel
IT (catégories/sous-catégories/matériels), avec recherche par scan de
code-barres et alertes email de stock bas.
2026-07-14 18:38:59 +02:00

34 lines
1.2 KiB
Python

"""
Connexion à la base de données.
La base est un simple fichier SQLite (data/stock.db) : pas de serveur de
base de données à installer ou lancer, tout vit dans ce dossier comme
demandé pour pouvoir développer et tester en local sans setup particulier.
"""
from pathlib import Path
from sqlmodel import Session, SQLModel, create_engine
DATA_DIR = Path(__file__).resolve().parent.parent / "data"
DATA_DIR.mkdir(exist_ok=True)
DATABASE_URL = f"sqlite:///{DATA_DIR / 'stock.db'}"
# check_same_thread=False : nécessaire car FastAPI/Starlette peut exécuter
# les routes synchrones dans un thread différent du thread principal, alors
# que SQLite refuse par défaut de partager une connexion entre threads.
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
def init_db() -> None:
"""Crée les tables si elles n'existent pas encore. Appelé au démarrage
de l'app ; ne fait rien si le schéma existe déjà (pas de perte de données)."""
SQLModel.metadata.create_all(engine)
def get_session():
"""Dependency FastAPI : fournit une session DB à une route, et la ferme
proprement une fois la requête terminée."""
with Session(engine) as session:
yield session