← Back to Tutorials

25. CRUD Operations

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional

app = FastAPI()

class Item(BaseModel):
    id: Optional[int] = None
    name: str
    price: float
    is_offer: bool = False

# In-memory database
items_db = {}
counter = 0

# CREATE
@app.post("/items/", status_code=201)
def create_item(item: Item):
    global counter
    counter += 1
    item.id = counter
    items_db[item.id] = item
    return item

# READ (all)
@app.get("/items/")
def list_items(skip: int = 0, limit: int = 10):
    return list(items_db.values())[skip:skip+limit]

# READ (one)
@app.get("/items/{item_id}")
def get_item(item_id: int):
    if item_id not in items_db:
        raise HTTPException(404, "Item not found")
    return items_db[item_id]

# UPDATE
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    if item_id not in items_db:
        raise HTTPException(404, "Item not found")
    item.id = item_id
    items_db[item_id] = item
    return item

# DELETE
@app.delete("/items/{item_id}", status_code=204)
def delete_item(item_id: int):
    if item_id not in items_db:
        raise HTTPException(404, "Item not found")
    del items_db[item_id]
✏️ Exercise: Build a complete CRUD API for a Todo app (title, description, completed, due_date). Test all 5 operations in Swagger UI.