MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDb z FastAPI

Wierzę, że masz już swoje odpowiedzi na forach dyskusyjnych projektu Fastapi na Github:Wydanie 452 (zamknięte). Ale podsumuję tutaj rozwiązania do wykorzystania w przyszłości:

Krótko mówiąc, możesz użyć silnika lub silnika mongo, Fastapi obsługuje oba i możesz ponownie użyć globalnego obiektu klienta, który został uruchomiony i zakończony w procesie aplikacji.

Niektóre szczegóły kontekstu, aby (miejmy nadzieję) wyjaśnić te technologie i ich relacje:

Oficjalnym sterownikiem MongoDB dla Pythona jest pymongo. Pod maskami zarówno MongoEngine, jak i Motor używają Pymongo. Pymongo implementuje bezpośredniego klienta dla MongoDB (demonów) i oferuje API Pythona do wykonywania żądań.

Jeśli chcesz, możesz użyć pymongo bezpośrednio z Fastapi. (Po stronie SQL byłoby to równoznaczne z użyciem psycopg2 bezpośrednio w Flask bez przechodzenia przez coś takiego jak SQLAlchemy.)

MongoEngine to ODM (ang. Object-Document Mapper). Oferuje zorientowane obiektowo API Pythona, którego możesz użyć w swojej aplikacji, aby pracować wygodniej, a jeśli chodzi o rzeczywiste żądania bazy danych, MongoEngine użyje pymongo.

Motor to wrapper dla pymongo, który sprawia, że ​​nie blokuje się (umożliwia async/await). Używa pętli zdarzeń, albo przez Tornado, albo przez asyncio. Jeśli używasz Fastapi z uvicorn, uvicorn zaimplementuje funkcjonalność asynchroniczną z uvloop. Krótko mówiąc, używając Motor z FastAPI, asynchronia powinna "po prostu działać". Niestety, Motor nie implementuje ODM. W tym sensie jest bardziej podobny do pymongo.

Fastapi obsługuje żądania klientów (za pomocą Starlette), ale pozwoli Ci zaimplementować własne połączenie z MongoDB. Nie jesteś więc ograniczony do żadnego konkretnego wyboru, ale przeważnie jesteś sam (a la Flask).

Możesz użyć haków uruchamiania/wyłączania swojej aplikacji FastAPI, aby uruchomić/zatrzymać klienta Motor/MongoEngine. Nie musisz się martwić, że Twój obiekt klienta nie będzie utrzymywał się z powodu problemów z wieloma procesami, ponieważ Fastapi jest jednowątkowy.

@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

Przykładową implementację silnika z Fastapi można znaleźć tutaj.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Co nowego w MongoDB 4.4

  2. SocketTimeout z otwartym połączeniem w MongoDB

  3. Bezproblemowa skala dla Twoich serwerów MongoDB

  4. DB z najlepszą wydajnością insertów/s?

  5. Rails + MongoMapper + pomoc dotycząca formularza EmbeddedDocument