FastAPI : comment gérer la connexion à la base de données par requête ?
poze 2 months ago414 gadefr
7
Avec FastAPI + SQLAlchemy, où créer la session de base de données ? Une globale ? Une par requête ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
poze 2 months ago
Stéphanie Louis 2.9k
1 Repons
3
✓✓ Repons yo aksepte
Une session par requête, fournie par une dépendance avec yield. L'engine (le pool de connexions), lui, est créé une seule fois au démarrage.
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
from fastapi import Depends, FastAPI
engine = create_async_engine(DATABASE_URL, pool_size=10, pool_pre_ping=True)
SessionLocal = async_sessionmaker(engine, expire_on_commit=False)
async def get_db():
async with SessionLocal() as session:
yield session
app = FastAPI()
@app.get('/users/{uid}')
async def get_user(uid: int, db: AsyncSession = Depends(get_db)):
return await db.get(User, uid)
Le bloc async with garantit la fermeture de la session même en cas d'exception. Ne partage jamais une session entre requêtes concurrentes : elle n'est pas thread/task-safe.
Konekte pou di lòt moun si li te mache.
answered 2 months ago
Fabienne Dorval 2.8k
Sign in and verify your email to post an answer.