मेरा मानना है कि आपको पहले से ही Github पर Fastapi प्रोजेक्ट के इश्यू फ़ोरम में अपने उत्तर मिल गए हैं:इश्यू 452 (बंद)। लेकिन मैं भविष्य के संदर्भ के लिए यहां समाधानों का पुनर्कथन करूंगा:
संक्षेप में, आप या तो मोटर या mongoengine का उपयोग कर सकते हैं, Fastapi दोनों का समर्थन करता है और आप एक वैश्विक क्लाइंट ऑब्जेक्ट का पुन:उपयोग कर सकते हैं जो आपकी ऐप प्रक्रिया के साथ शुरू और समाप्त हो गया है।
(उम्मीद है) इन तकनीकों और उनके संबंधों को स्पष्ट करने के लिए कुछ संदर्भ विवरण:
पायथन के लिए आधिकारिक MongoDB ड्राइवर pymongo है। हुड के तहत, MongoEngine और Motor दोनों Pymongo का उपयोग करते हैं। पाइमोंगो मोंगोडीबी (डेमॉन) के लिए एक सीधा क्लाइंट लागू करता है और अनुरोध करने के लिए एक पायथन एपीआई प्रदान करता है।
यदि आप चाहते हैं, तो आप सीधे फास्टापी के साथ पाइमोंगो का उपयोग कर सकते हैं। (वें SQL पक्ष पर, यह SQLAlchemy जैसी किसी चीज़ से गुज़रे बिना सीधे फ्लास्क में psycopg2 का उपयोग करने के बराबर होगा।)
MongoEngine एक ODM (ऑब्जेक्ट-डॉक्यूमेंट मैपर) है। यह एक पायथन ऑब्जेक्ट-ओरिएंटेड एपीआई प्रदान करता है जिसका उपयोग आप अपने एप्लिकेशन में अधिक आराम से काम करने के लिए कर सकते हैं और जब वास्तविक डीबी अनुरोधों की बात आती है, तो मोंगोइंजिन पाइमोंगो का उपयोग करेगा।
मोटर पाइमोंगो के लिए एक आवरण है जो इसे गैर-अवरुद्ध बनाता है (async/प्रतीक्षा की अनुमति देता है)। यह एक इवेंट-लूप का उपयोग करता है, या तो टॉरनेडो के माध्यम से या एसिंकियो के माध्यम से। यदि आप यूविकॉर्न के साथ फास्टापी का उपयोग कर रहे हैं, तो यूविकॉर्न यूवलूप के साथ एसिंक्स कार्यक्षमता को लागू करेगा। संक्षेप में, FastAPI के साथ मोटर का उपयोग करते हुए, async को "बस काम करना चाहिए"। दुर्भाग्य से, मोटर एक ODM लागू नहीं करता है। इस अर्थ में यह पाइमोंगो के समान है।
Fastapi ग्राहकों से अनुरोधों को संभालता है (Starlette का उपयोग करके), लेकिन यह आपको MongoDB से अपना कनेक्शन लागू करने देगा। तो आप किसी विशेष पसंद तक ही सीमित नहीं हैं, लेकिन आप ज्यादातर अपने दम पर (एक ला फ्लास्क) हैं।
आप अपने Motor/MongoEngine क्लाइंट को शुरू/बंद करने के लिए अपने FastAPI ऐप के स्टार्टअप/शटडाउन हुक का उपयोग कर सकते हैं। आपको अपने क्लाइंट ऑब्जेक्ट के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि मल्टीप्रोसेस मुद्दों के कारण यह जारी नहीं है, क्योंकि 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 के साथ मोटर का एक उदाहरण कार्यान्वयन यहां पाया जा सकता है।