CRUD অপারেশন তৈরি করা (Create, Read, Update, Delete)

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর সঙ্গে Database Integration
179

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)

এখন আমরা FastAPICRUD অপারেশনগুলোর জন্য রাউট তৈরি করব। প্রতিটি অপারেশনের জন্য আলাদা এন্ডপয়েন্ট তৈরি করা হবে।

উদাহরণ: 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 তৈরি করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...