FastAPI তে Motor লাইব্রেরি ব্যবহার করে MongoDB-এর সাথে asynchronous ইন্টারঅ্যাকশন খুবই সহজ। Motor হলো MongoDB এর জন্য একটি asynchronous ড্রাইভার যা Tornado বা asyncio এ কাজ করতে পারে এবং FastAPI-তে MongoDB অ্যাপ্লিকেশন পরিচালনার জন্য আদর্শ।
এখানে দেখানো হবে কিভাবে Motor লাইব্রেরি ব্যবহার করে MongoDB এর সাথে asynchronous ইন্টারঅ্যাকশন করা যায় এবং FastAPI অ্যাপ্লিকেশনের মধ্যে MongoDB এর সাথে ডেটা ইন্টিগ্রেশন করা যায়।
Step 1: Motor এবং MongoDB সেটআপ
প্রথমে, আপনার প্রকল্পে Motor লাইব্রেরি ইনস্টল করতে হবে। এটি MongoDB এর asynchronous ক্লায়েন্ট ড্রাইভার।
Motor ইনস্টলেশন
pip install motor
এছাড়া, MongoDB সার্ভার চালু থাকতে হবে। আপনি MongoDB ডাউনলোড করে লোকালহোস্টে MongoDB চালু করতে পারেন অথবা MongoDB Atlas ব্যবহার করতে পারেন।
Step 2: FastAPI অ্যাপ্লিকেশন সেটআপ
Motor ব্যবহার করে MongoDB এর সাথে সংযোগ স্থাপন করতে, প্রথমে FastAPI অ্যাপ্লিকেশন তৈরি করতে হবে।
উদাহরণ: MongoDB সেটআপ এবং Motor ব্যবহার
from fastapi import FastAPI, HTTPException
from motor.motor_asyncio import AsyncIOMotorClient
from pydantic import BaseModel
from typing import List
app = FastAPI()
# MongoDB client setup
@app.on_event("startup")
async def startup_db():
app.mongodb_client = AsyncIOMotorClient("mongodb://localhost:27017")
app.mongodb_db = app.mongodb_client.mydatabase
@app.on_event("shutdown")
async def shutdown_db():
app.mongodb_client.close()
# Pydantic model for request body
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
collection = app.mongodb_db.items
result = await collection.insert_one(item.dict())
item_in_db = await collection.find_one({"_id": result.inserted_id})
return item_in_db
@app.get("/items/{item_id}", response_model=Item)
async def get_item(item_id: str):
collection = app.mongodb_db.items
item = await collection.find_one({"_id": item_id})
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item
এখানে:
AsyncIOMotorClient: এটি MongoDB-এর asynchronous ড্রাইভার।on_event("startup"): অ্যাপ্লিকেশন চালু হওয়ার সময় MongoDB ক্লায়েন্ট এবং ডাটাবেস সংযোগ স্থাপন করা হয়।on_event("shutdown"): অ্যাপ্লিকেশন বন্ধ হওয়ার সময় MongoDB ক্লায়েন্ট বন্ধ করা হয়।
এছাড়া, Item নামের একটি Pydantic মডেল তৈরি করা হয়েছে যা MongoDB ডাটাবেসে item ডাটা সঞ্চয় করবে।
Step 3: MongoDB Interaction (Insert, Retrieve)
এখন আমরা দেখব কিভাবে MongoDB তে ডাটা ইনসার্ট করা এবং রিট্রিভ করা যায়।
১. Item ইনসার্ট করা (POST রিকোয়েস্ট)
MongoDB তে নতুন item ইনসার্ট করার জন্য, POST রিকোয়েস্ট পাঠাতে হবে।
রিকোয়েস্ট:
POST /items/
{
"name": "Laptop",
"description": "A high-end gaming laptop",
"price": 1500.00,
"tax": 100.00
}
এটি MongoDB তে একটি নতুন item সংরক্ষণ করবে।
২. Item রিট্রিভ করা (GET রিকোয়েস্ট)
MongoDB তে সংরক্ষিত item গুলি রিট্রিভ করার জন্য GET রিকোয়েস্ট ব্যবহার করা হবে।
রিকোয়েস্ট:
GET /items/{item_id}
এখানে, {item_id} MongoDB ডাটাবেসে সঞ্চিত আইটেমের _id হতে হবে।
Step 4: MongoDB Query Operations
Motor লাইব্রেরি MongoDB তে বিভিন্ন ধরণের query operations সাপোর্ট করে। যেমন:
- find: ডাটাবেস থেকে ডাটা অনুসন্ধান।
- update: ডাটাবেসে ডাটা আপডেট করা।
- delete: ডাটাবেস থেকে ডাটা মুছে ফেলা।
উদাহরণ: MongoDB Query Operations
@app.put("/items/{item_id}")
async def update_item(item_id: str, item: Item):
collection = app.mongodb_db.items
update_result = await collection.update_one(
{"_id": item_id}, {"$set": item.dict()}
)
if update_result.modified_count == 0:
raise HTTPException(status_code=404, detail="Item not found")
return {"message": "Item updated successfully"}
@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
collection = app.mongodb_db.items
delete_result = await collection.delete_one({"_id": item_id})
if delete_result.deleted_count == 0:
raise HTTPException(status_code=404, detail="Item not found")
return {"message": "Item deleted successfully"}
এখানে:
update_one: MongoDB তে একটি ডকুমেন্ট আপডেট করতে ব্যবহৃত হয়।delete_one: MongoDB থেকে একটি ডকুমেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।
Step 5: Run the FastAPI Application
এখন FastAPI অ্যাপ্লিকেশনটি চালানোর জন্য Uvicorn ব্যবহার করা হবে:
uvicorn main:app --reload
এটি localhost:8000 এ অ্যাপ্লিকেশন চালু করবে।
Step 6: Test the Application
- POST Request:
/items/এ POST রিকোয়েস্ট পাঠান এবং একটি নতুন item ইনসার্ট করুন। - GET Request:
/items/{item_id}তে GET রিকোয়েস্ট পাঠান এবং ইনসার্ট করা item টি রিট্রিভ করুন। - PUT Request:
/items/{item_id}এ PUT রিকোয়েস্ট পাঠান এবং item টি আপডেট করুন। - DELETE Request:
/items/{item_id}এ DELETE রিকোয়েস্ট পাঠান এবং item টি মুছে ফেলুন।
FastAPI এবং Motor লাইব্রেরি ব্যবহার করে আপনি MongoDB-এর সাথে asynchronous ইন্টারঅ্যাকশন সহজেই করতে পারেন। MongoDB তে ডাটা ইনসার্ট, আপডেট, ডিলিট এবং ফেচ করার কাজগুলি asynchronous ভাবে সম্পন্ন হয়, যা আপনার অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে। Motor MongoDB-এর জন্য একটি শক্তিশালী ড্রাইভার যা asyncio এবং Tornado ভিত্তিক অ্যাপ্লিকেশনগুলির সাথে সম্পূর্ণরূপে কাজ করতে সক্ষম।
Read more