FastAPI 개발일지/개발하기

FastAPI 개발일지12-ITEM관리

hccode0419 2024. 10. 17. 17:03

저번 포스트에는 DB를 연결하여 간단하게 item을 생성했었다. 

 

오늘은 item을 생성하고, 수정하고, 삭제하는 작업을 해보자!

 

1. item 생성

#item/item_router.py


def insert_data(db, table):
    db.add(table)
    db.commit()
    db.refresh(table)
    
@router.post("/create_item", response_model=Create_item)
def create_item(item:Create_item, 
                item_db: Session = Depends(get_itemdb)):
    
    create_items = Item_model(item_name=item.item_name, 
                item_price=item.item_price,
                amount=item.amount,
                create_at=item.create_at,
                create_date=item.create_date)

    insert_data(item_db, create_items)

    return create_items

 

item을 Create_item class로 받아온다. (Create_item은 item_schema.py에서 확인)

item_db를 의존성을 주입하여 DB를 들고와서 작업을 진행한다.

 

create_items 변수에 models.py에서 작성한 Item_model을 들고와 형식에 맞게 작성한 후 

insert_data를 통해 item_db에 저장한다.

2. item 수정

#item/item_router.py


@router.put("/update_item", response_model=Modify_item)
def update_item(item: Modify_item,
                item_id: int,
                item_db: Session = Depends(get_itemdb)):
    
    modify_item = Modify_item(item_name=item.item_name,
                              item_price=item.item_price,
                              amount=item.amount)

    item = item_db.query(Item_model).filter(Item_model.item_id == item_id).first()

    """
    item_db에서 Item_model에 해당하는 table을 들고온 후 Item_model.item_id와 입력한 item_id가 같은 첫번째 row를 들고온다.

    이때 Item_model은 model.py에 작성한 DB table의 양식이다.

    이 형식은 자주 등장할 것이니 기억해주세요!

    """

    if not item:
        raise HTTPException(status_code=404, detail=f"item_id : {item_id} 내역이 없습니다.")

    """
    item이 있는지 확인하여 없으면 예외처리한다.

    """

    item.item_name = modify_item.item_name
    item.item_price = modify_item.item_price
    item.amount = modify_item.amount

    item_db.commit()
    item_db.refresh(item)

    return modify_item

 

item 생성과 비슷하게 item과 item_id, item_db를 들고온다. 

 

modify_item을 통해 수정할 정보를 작성한다.

 

이후 item을 받아와 수정한 후 DB에 commit한다. 

 

 

3. item 삭제

#item/item_router.py

@router.delete("/delete_item")
def delete_item(item_id: int,
                item_db: Session = Depends(get_itemdb)):
    item = item_db.query(Item_model).filter(Item_model.item_id == item_id)

    if not item.first():
        raise HTTPException(status_code=404, detail=f"item_id : {item_id} 내역이 없습니다.")
    
    item.delete()

    item_db.commit()

    return {"message":f"item_id : {item_id} - success delete"}

 

삭제할 item_id를 입력하여 삭제한다.

 

item_id가 없을 경우 예외처리한다.

4. item 조회

4-1) item 전체 조회

DB에 저장되어있는 item을 10개씩 조회한다.

#item/item_router.py

@router.get("/get_items")
def get_items(skip:int = 0, limit:int = 10, 
              item_db: Session = Depends(get_itemdb)):
    
    item = item_db.query(Item_model).all()
    if not item:
        raise HTTPException(status_code=404, detail="item 내역이 없습니다.")
    
    return item[skip : skip + limit]

 

4-2) item_id 조회

item_db 중 item_id에 해당하는 item을 조회한다.

# item/item_router.py

@router.get("/get_item")
def get_item(item_id:int, 
             item_db: Session = Depends(get_itemdb)):
    item = item_db.query(Item_model).filter(Item_model.item_id == item_id).first()
    if not item:
        raise HTTPException(status_code=404, detail=f"item_id : {item_id} 내역이 없습니다.")

    return item

 

 

5. item/item_schema.py 

class 상속 개념을 사용하여 가장 상위 개념인 Item을 만들고

Create_item과 Modify_item을 관리한다.

# item/item_schema.py

from pydantic import BaseModel
from datetime import datetime


class Item(BaseModel):
    item_name: str
    item_price: int

class Create_item(Item):
    amount: int
    create_at: str
    create_date: datetime

class Modify_item(Item):
    amount: int

 

 

자세한 코드는 GitHub에서 확인해보자!

https://github.com/hccode0419/project-fastapi/tree/12-item