Dependențe cu Yield (Context Managers) în FastAPI în FastAPI

di FastAPI 0.110+ / Python 3.10+ Q&A / Distribuie cod

Gestiunea resurselor cu ciclu de viață complet în dependențe: deschiderea și închiderea garantată a sesiunilor de baze de date.

Sintaxă
async def get_db(): try: yield db finally: db.close()

Când o dependență trebuie să execute o acțiune de curățare după finalizarea cererii HTTP (de exemplu: eliberarea unei conexiuni din connection pool sau închiderea unei tranzacții), FastAPI suportă dependențe cu yield.

Codul dinaintea instrucțiunii yield rulează înainte ca funcția endpoint să fie apelată. Valoarea transmisă prin yield este injectată în endpoint, iar codul de după yield (plasat de regulă într-un bloc finally) este garantat să ruleze chiar dacă funcția a aruncat o eroare.

Exemplu: Dependență de sesiune de bază de date cu yield și bloc finally
from fastapi import FastAPI, Depends
from typing import Annotated

app = FastAPI()

class FakeDBSession:
    def close(self):
        print("Conexiunea la baza de date a fost închisă în siguranță!")

async def get_db():
    db = FakeDBSession()
    print("Conexiune DB deschisă")
    try:
        yield db
    finally:
        db.close()

@app.get("/items")
async def list_items(db: Annotated[FakeDBSession, Depends(get_db)]):
    return {"status": "date interogate"}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Dependențe cu Yield (Context Managers) în FastAPI

Ai o nelămurire despre utilizarea comenzii Dependențe cu Yield (Context Managers) în FastAPI sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.