Věřím, že jste již dostali své odpovědi na diskusních fórech projektu Fastapi na Github:Issue 452 (uzavřeno). Ale zde rekapituluji řešení pro budoucí použití:
Stručně řečeno, můžete použít motor nebo mongoengine, Fastapi podporuje obojí a můžete znovu použít globální klientský objekt, který je spuštěn a ukončen procesem vaší aplikace.
Některé kontextové podrobnosti k (doufejme) objasnění těchto technologií a jejich vztahů:
Oficiální MongoDB ovladač pro Python je pymongo. Pod kapotami MongoEngine i Motor používají Pymongo. Pymongo implementuje přímého klienta pro MongoDB (démony) a nabízí Python API pro vytváření požadavků.
Pokud byste chtěli, mohli byste použít pymongo přímo s Fastapi. (Na straně SQL by to bylo ekvivalentní použití psycopg2 přímo ve Flasku, aniž byste museli projít něčím jako SQLAlchemy.)
MongoEngine je ODM (Object-Document Mapper). Nabízí objektově orientované API Pythonu, které můžete použít ve své aplikaci pro pohodlnější práci, a pokud jde o skutečné požadavky DB, MongoEngine použije pymongo.
Motor je obal pro pymongo, díky kterému je neblokující (umožňuje asynchronní/vyčkávání). Používá smyčku událostí, buď přes Tornado, nebo přes asyncio. Pokud používáte Fastapi s uvicorn, uvicorn implementuje asynchronní funkce s uvloop. Zkrátka, při použití Motoru s FastAPI by měl asynchronní „prostě fungovat“. Bohužel Motor neimplementuje ODM. V tomto smyslu je více podobný pymongu.
Fastapi zpracovává požadavky od klientů (pomocí Starlette), ale umožní vám implementovat vlastní připojení k MongoDB. Nejste tedy omezeni žádnou konkrétní volbou, ale většinou jste sami (a la Flask).
Ke spuštění/zastavení klienta Motor/MongoEngine můžete použít spouštěcí/vypínací háčky vaší aplikace FastAPI. Nemusíte se obávat, že by váš klientský objekt nepřetrvával kvůli problémům s více procesy, protože Fastapi je jednovláknový.
@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
Příklad implementace motoru s Fastapi lze nalézt zde.