MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDb с FastAPI

Вярвам, че вече сте получили отговорите си във форумите за проблеми на проекта Fastapi на Github:Проблем 452 (затворен). Но тук ще обобщя решенията за бъдещи справки:

Накратко, можете да използвате двигател или mongoengine, Fastapi поддържа и двете и можете да използвате повторно глобален клиентски обект, който е започнал и приключил с процеса на приложението ви.

Някои подробности за контекста, които (надявам се) да изяснят тези технологии и техните взаимоотношения:

Официалният драйвер на MongoDB за Python е pymongo. Под капаците и MongoEngine, и Motor използват Pymongo. Pymongo внедрява директен клиент за MongoDB (демони) и предлага API на Python за отправяне на заявки.

Ако желаете, можете да използвате pymongo директно с Fastapi. (От тази SQL страна на нещата това би било еквивалентно на използване на psycopg2 в Flask директно, без да преминавате през нещо като SQLAlchemy.)

MongoEngine е ODM (обектно-документно картографиране). Той предлага обектно-ориентиран API на Python, който можете да използвате в приложението си, за да работите по-удобно и когато става въпрос за действителните DB заявки, MongoEngine ще използва pymongo.

Motor е обвивка за pymongo, която го прави неблокиращ (позволяващ async/await). Той използва цикъл на събития, или чрез Tornado, или чрез asyncio. Ако използвате Fastapi с uvicorn, uvicorn ще приложи асинхронна функционалност с uvloop. Накратко, използвайки Motor с FastAPI, асинхронът трябва да "просто работи". За съжаление, Motor не прилага ODM. В този смисъл е по-подобен на пимонго.

Fastapi обработва заявките от клиенти (използвайки Starlette), но ще ви позволи да реализирате собствена връзка с MongoDB. Така че не сте ограничени до някакъв конкретен избор, но сте предимно сами (а ла Flask).

Можете да използвате куките за стартиране/изключване на вашето приложение FastAPI, за да стартирате/спирате вашия клиент Motor/MongoEngine. Не е нужно да се притеснявате, че вашият клиентски обект няма да продължи поради проблеми с много процеси, тъй като Fastapi е еднонишков.

@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

Примерна реализация на мотор с Fastapi може да се намери тук.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Урок за MongoDB:Свързване с MongoDB в Scala

  2. MongoDB GPG – Невалидни подписи

  3. Как да получите деня, месеца и годината от дата в SQL

  4. Вече налични:Напълно хоствани екземпляри на MongoDB на AWS

  5. Защо Mongoose добавя празни масиви?