MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDb dengan FastAPI

Saya yakin Anda sudah mendapatkan jawaban Anda di forum masalah proyek Fastapi di Github:Edisi 452 (ditutup). Tapi saya akan rekap solusinya di sini untuk referensi di masa mendatang:

Singkatnya, Anda dapat menggunakan motor atau mongoengine, Fastapi mendukung keduanya dan Anda dapat menggunakan kembali objek klien global yang dimulai dan diakhiri dengan proses aplikasi Anda.

Beberapa detail konteks untuk (semoga) memperjelas teknologi ini dan hubungannya:

Driver MongoDB resmi untuk Python adalah pymongo. Di bawah tenda, baik MongoEngine dan Motor menggunakan Pymongo. Pymongo mengimplementasikan klien langsung untuk MongoDB (daemon) dan menawarkan API Python untuk membuat permintaan.

Jika mau, Anda bisa menggunakan pymongo dengan Fastapi secara langsung. (Di sisi SQL, ini akan setara dengan menggunakan psycopg2 di Flask secara langsung tanpa melalui sesuatu seperti SQLAlchemy.)

MongoEngine adalah ODM (Object-Document Mapper). Ini menawarkan API berorientasi objek Python yang dapat Anda gunakan dalam aplikasi Anda untuk bekerja lebih nyaman dan ketika datang ke permintaan DB yang sebenarnya, MongoEngine akan menggunakan pymongo.

Motor adalah pembungkus untuk pymongo yang membuatnya tidak memblokir (memungkinkan async/menunggu). Menggunakan event-loop, baik melalui Tornado atau melalui asyncio. Jika Anda menggunakan Fastapi dengan uvicorn, uvicorn akan mengimplementasikan fungsionalitas async dengan uvloop. Singkatnya, menggunakan Motor dengan FastAPI, async seharusnya "berfungsi". Sayangnya, Motor tidak menerapkan ODM. Dalam hal ini lebih mirip dengan pymongo.

Fastapi menangani permintaan dari klien (menggunakan Starlette), tetapi itu akan memungkinkan Anda mengimplementasikan koneksi Anda sendiri ke MongoDB. Jadi Anda tidak dibatasi pada pilihan tertentu, tetapi Anda kebanyakan sendirian (a la Flask).

Anda dapat menggunakan kait pengaktifan/penonaktifan aplikasi FastAPI Anda untuk memulai/menghentikan klien Motor/MongoEngine Anda. Anda tidak perlu khawatir objek klien Anda tidak bertahan karena masalah multiproses, karena Fastapi adalah single-threaded.

@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

Contoh implementasi motor dengan Fastapi dapat dilihat di sini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Menghentikan Runaway Index Build di MongoDB

  2. ClusterControl - Manajemen Cadangan Tingkat Lanjut - MongoDB

  3. Menyortir agregasi hasil addToSet

  4. Pencarian Teks Penuh dan Sebagian MongoDB

  5. Rails 3:cara menggunakan record aktif dan mongoid secara bersamaan