MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDb với FastAPI

Tôi tin rằng bạn đã có câu trả lời của mình trong các diễn đàn về vấn đề của dự án Fastapi trên Github:Số 452 (đã đóng). Nhưng tôi sẽ tóm tắt các giải pháp ở đây để tham khảo trong tương lai:

Tóm lại, bạn có thể sử dụng motor hoặc mongoengine, Fastapi hỗ trợ cả hai và bạn có thể sử dụng lại đối tượng khách hàng toàn cầu đã bắt đầu và kết thúc với quy trình ứng dụng của bạn.

Một số chi tiết ngữ cảnh để (hy vọng) làm rõ những công nghệ này và mối quan hệ của chúng:

Trình điều khiển MongoDB chính thức cho Python là pymongo. Dưới mui xe, cả MongoEngine và Motor đều sử dụng Pymongo. Pymongo triển khai một ứng dụng khách trực tiếp cho MongoDB (daemon) và cung cấp API Python để thực hiện các yêu cầu.

Nếu bạn muốn, bạn có thể sử dụng pymongo với Fastapi trực tiếp. (Về mặt SQL của mọi thứ, điều này sẽ tương đương với việc sử dụng trực tiếp psycopg2 trong Flask mà không cần thông qua thứ gì đó như SQLAlchemy.)

MongoEngine là một ODM (Object-Document Mapper). Nó cung cấp một API hướng đối tượng Python mà bạn có thể sử dụng trong ứng dụng của mình để làm việc thoải mái hơn và khi nói đến các yêu cầu DB thực tế, MongoEngine sẽ sử dụng pymongo.

Động cơ là một trình bao bọc cho pymongo làm cho nó không bị chặn (cho phép không đồng bộ / chờ đợi). Nó sử dụng một vòng lặp sự kiện, thông qua Tornado hoặc qua asyncio. Nếu bạn đang sử dụng Fastapi với uvicorn, uvicorn sẽ triển khai chức năng không đồng bộ với uvloop. Tóm lại, sử dụng Motor với FastAPI, async sẽ "chỉ hoạt động". Thật không may, Động cơ không triển khai ODM. Theo nghĩa này, nó giống với pymongo hơn.

Fastapi xử lý các yêu cầu từ khách hàng (sử dụng Starlette), nhưng nó sẽ cho phép bạn triển khai kết nối của riêng mình với MongoDB. Vì vậy, bạn không bị giới hạn bởi bất kỳ sự lựa chọn cụ thể nào, nhưng bạn chủ yếu là của riêng mình (một chiếc bình).

Bạn có thể sử dụng các móc khởi động / tắt của ứng dụng FastAPI để khởi động / dừng ứng dụng Motor / MongoEngine của mình. Bạn không cần phải lo lắng về việc đối tượng khách hàng của mình không tồn tại do sự cố đa xử lý, vì Fastapi là một luồng.

@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

Bạn có thể tìm thấy một ví dụ về triển khai động cơ với Fastapi tại đây.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để MongoDB sắp xếp tài liệu của họ trong một bộ sưu tập?

  2. Cách thích hợp để nhập tệp json vào mongo

  3. Cách tốt nhất để lập mô hình hệ thống bỏ phiếu trong MongoDB

  4. Hiệu suất tổng hợp tra cứu kém

  5. Cập nhật Mảng lồng nhau với MongoDB