sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb med FastAPI

Jeg tror, ​​du allerede har fået dine svar i emneforaene for Fastapi-projektet på Github:Issue 452 (lukket). Men jeg vil opsummere løsningerne her til fremtidig reference:

Kort sagt, du kan bruge enten motor eller mongomotor, Fastapi understøtter begge dele, og du kan genbruge et globalt klientobjekt, der er startet og sluttet med din app-proces.

Nogle kontekstdetaljer for (forhåbentlig) at afklare disse teknologier og deres relationer:

Den officielle MongoDB-driver til Python er pymongo. Under hætterne bruger både MongoEngine og Motor Pymongo. Pymongo implementerer en direkte klient til MongoDB (dæmoner) og tilbyder en Python API til at fremsætte anmodninger.

Hvis du ville, kunne du bruge pymongo med Fastapi direkte. (På den SQL-side af tingene ville dette svare til at bruge psycopg2 i Flask direkte uden at gå igennem noget som SQLAlchemy.)

MongoEngine er en ODM (Object-Document Mapper). Det tilbyder en Python objektorienteret API, som du kan bruge i din applikation til at arbejde mere komfortabelt, og når det kommer til de faktiske DB-anmodninger, vil MongoEngine bruge pymongo.

Motor er en indpakning til pymongo, der gør den ikke-blokerende (tillader async/afvent). Den bruger en event-loop, enten gennem Tornado eller gennem asyncio. Hvis du bruger Fastapi med uvicorn, vil uvicorn implementere async-funktionalitet med uvloop. Kort sagt, ved at bruge Motor med FastAPI, skulle async "bare fungere". Motor implementerer desværre ikke en ODM. I denne forstand minder det mere om pymongo.

Fastapi håndterer anmodninger fra klienter (ved hjælp af Starlette), men det vil lade dig implementere din egen forbindelse til MongoDB. Så du er ikke begrænset til noget bestemt valg, men du er for det meste på egen hånd (a la Flask).

Du kan bruge opstarts-/nedlukningskrogene på din FastAPI-app til at starte/stoppe din Motor/MongoEngine-klient. Du behøver ikke bekymre dig om, at dit klientobjekt ikke fortsætter på grund af problemer med flere processer, fordi Fastapi er enkelttrådet.

@app.on_event("startup")
async def create_db_client():
    # start client here and reuse in future requests


@app.on_event("shutdown")
async def shutdown_db_client():
    # stop your client here

Et eksempel på implementering af motor med Fastapi kan findes her.



  1. Redis (ioredis) - Kan ikke fange forbindelsesfejl for at kunne håndtere dem elegant

  2. Matcher et array-felt, som indeholder en hvilken som helst kombination af det leverede array i MongoDB

  3. ScaleGrid Fuldt administreret hosting til Redis™ nu tilgængelig på Azure

  4. MongoDB begrænse lagerstørrelse?