저번 포스트에는 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
'FastAPI 개발일지 > 개발하기' 카테고리의 다른 글
FastAPI 개발일지11 - database 연결하기 (4) | 2024.10.15 |
---|---|
FastAPI 개발일지10 - 중간 점검 (0) | 2024.10.10 |
FastAPI 개발일지9 - APIRouter (2) | 2024.10.05 |
FastAPI 개발일지8 - Path, Query, Request body (3) | 2024.10.03 |
FastAPI 개발일지7 - get, post, put, delete (0) | 2024.09.19 |