FastAPI ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন তৈরি করা সহজ এবং দ্রুত। FastAPI এর সাহায্যে আমরা API তৈরি করতে পারি যা ডাটা তৈরি, পড়া, আপডেট এবং মুছে ফেলার কাজগুলো সঞ্চালন করতে পারে। এখানে, আমরা দেখব কিভাবে FastAPI তে CRUD অপারেশন তৈরি করা যায়।
Step 1: ফাইল স্ট্রাকচার তৈরি করা
প্রথমে, একটি প্রাথমিক ফোল্ডার স্ট্রাকচার তৈরি করা যাক। উদাহরণস্বরূপ:
my_fastapi_project/
├── app/
│ ├── main.py
│ ├── models.py
│ ├── schemas.py
│ ├── crud.py
├── requirements.txt
Step 2: Pydantic Models তৈরি করা (Schemas)
FastAPI তে CRUD অপারেশন করার জন্য প্রথমে আমাদের Pydantic models (schemas) তৈরি করতে হবে, যা ডাটা ভ্যালিডেশন এবং টাইপ এনোটেশন নিশ্চিত করে।
উদাহরণ: schemas.py ফাইল
from pydantic import BaseModel
from typing import Optional
class ItemBase(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
class ItemCreate(ItemBase):
pass
class ItemUpdate(ItemBase):
pass
class Item(ItemBase):
id: int
class Config:
orm_mode = True
এখানে:
- ItemBase: একটি বেস মডেল যা সাধারণ ফিল্ডসমূহ ধারণ করে।
- ItemCreate: নতুন আইটেম তৈরি করার জন্য ব্যবহৃত মডেল।
- ItemUpdate: আইটেম আপডেট করার জন্য ব্যবহৃত মডেল।
- Item: ডাটা রিটার্ন করার জন্য ব্যবহৃত মডেল, এতে
idফিল্ডও অন্তর্ভুক্ত করা হয়েছে।
Step 3: Models তৈরি করা (Database Models)
এখন, ডাটাবেস মডেল তৈরি করা হবে। উদাহরণস্বরূপ, আমরা SQLAlchemy ব্যবহার করে একটি ডাটাবেস মডেল তৈরি করব।
উদাহরণ: models.py ফাইল
from sqlalchemy import Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(String, index=True, nullable=True)
price = Column(Float)
tax = Column(Float, nullable=True)
এখানে, Item একটি SQLAlchemy মডেল যা items নামের টেবিলকে প্রতিনিধিত্ব করে। এতে id, name, description, price এবং tax ফিল্ড রয়েছে।
Step 4: CRUD অপারেশন তৈরি করা
এখন আমরা CRUD অপারেশন তৈরি করব, যেখানে Create, Read, Update এবং Delete অপারেশন সংজ্ঞায়িত করা হবে।
উদাহরণ: crud.py ফাইল
from sqlalchemy.orm import Session
from . import models, schemas
# Create
def create_item(db: Session, item: schemas.ItemCreate):
db_item = models.Item(name=item.name, description=item.description, price=item.price, tax=item.tax)
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
# Read
def get_item(db: Session, item_id: int):
return db.query(models.Item).filter(models.Item.id == item_id).first()
def get_items(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.Item).offset(skip).limit(limit).all()
# Update
def update_item(db: Session, item_id: int, item: schemas.ItemUpdate):
db_item = db.query(models.Item).filter(models.Item.id == item_id).first()
if db_item:
db_item.name = item.name
db_item.description = item.description
db_item.price = item.price
db_item.tax = item.tax
db.commit()
db.refresh(db_item)
return db_item
# Delete
def delete_item(db: Session, item_id: int):
db_item = db.query(models.Item).filter(models.Item.id == item_id).first()
if db_item:
db.delete(db_item)
db.commit()
return db_item
এখানে:
- create_item: নতুন আইটেম তৈরি করে এবং ডাটাবেসে সেভ করে।
- get_item: একটি নির্দিষ্ট আইটেম আইডি দিয়ে আইটেমটি খুঁজে বের করে।
- get_items: সমস্ত আইটেমের একটি তালিকা রিটার্ন করে।
- update_item: একটি নির্দিষ্ট আইটেম আপডেট করে।
- delete_item: একটি নির্দিষ্ট আইটেম মুছে ফেলে।
Step 5: FastAPI এ রাউটিং (API Endpoints)
এখন আমরা FastAPI এ CRUD অপারেশনগুলোর জন্য রাউট তৈরি করব। প্রতিটি অপারেশনের জন্য আলাদা এন্ডপয়েন্ট তৈরি করা হবে।
উদাহরণ: main.py ফাইল
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from . import crud, models, schemas
# Database setup
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# FastAPI instance
app = FastAPI()
# Dependency to get DB session
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# Create item
@app.post("/items/", response_model=schemas.Item)
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
return crud.create_item(db=db, item=item)
# Read item by ID
@app.get("/items/{item_id}", response_model=schemas.Item)
def read_item(item_id: int, db: Session = Depends(get_db)):
db_item = crud.get_item(db=db, item_id=item_id)
if db_item is None:
raise HTTPException(status_code=404, detail="Item not found")
return db_item
# Read all items
@app.get("/items/", response_model=list[schemas.Item])
def read_items(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
items = crud.get_items(db=db, skip=skip, limit=limit)
return items
# Update item
@app.put("/items/{item_id}", response_model=schemas.Item)
def update_item(item_id: int, item: schemas.ItemUpdate, db: Session = Depends(get_db)):
db_item = crud.update_item(db=db, item_id=item_id, item=item)
if db_item is None:
raise HTTPException(status_code=404, detail="Item not found")
return db_item
# Delete item
@app.delete("/items/{item_id}", response_model=schemas.Item)
def delete_item(item_id: int, db: Session = Depends(get_db)):
db_item = crud.delete_item(db=db, item_id=item_id)
if db_item is None:
raise HTTPException(status_code=404, detail="Item not found")
return db_item
এখানে:
/items/: নতুন আইটেম তৈরি করার জন্য।/items/{item_id}: নির্দিষ্ট আইটেমের ডিটেইল দেখতে।/items/: সমস্ত আইটেমের তালিকা দেখতে।/items/{item_id}: নির্দিষ্ট আইটেম আপডেট বা ডিলিট করতে।
Step 6: Requirements.txt
প্রজেক্টে ব্যবহৃত লাইব্রেরিগুলির তালিকা তৈরি করতে requirements.txt ফাইল তৈরি করা হয়।
fastapi
uvicorn
sqlalchemy
pydantic
Step 7: সার্ভার চালানো
FastAPI অ্যাপ্লিকেশন চালাতে uvicorn ব্যবহার করা হয়।
uvicorn app.main:app --reload
FastAPI ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন তৈরি করা অত্যন্ত সহজ এবং দ্রুত। আমরা এখানে SQLAlchemy ব্যবহার করেছি ডাটাবেস মডেল তৈরি করার জন্য এবং Pydantic মডেল ব্যবহার করেছি ডাটা ভ্যালিডেশন এবং টাইপ এনোটেশন নিশ্চিত করার জন্য। এইভাবে FastAPI তে CRUD অপারেশন করতে আপনি খুবই সহজে একটি পূর্ণাঙ্গ API তৈরি করতে পারেন।
Read more