sql >> Databáze >  >> NoSQL >> MongoDB

MongoDb s FastAPI

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.



  1. Co je nového v MongoDB 4.2

  2. Získejte BinData UUID z Mongo jako řetězec

  3. Nainstalujte phpredis MAC OSX

  4. phpredis na fedoře 12