일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- konlpy
- 머신러닝
- 비지도학습
- MachineLearning
- programmablesearchengine
- NLP
- HTML
- 판다스
- chatGPT
- 파이썬웹개발
- sklearn
- OpenAIAPI
- 파이토치기본
- 사이킷런
- 파이썬
- 딥러닝
- pandas
- 파이토치
- 랭체인
- 자연어분석
- Python
- 판다스 데이터정렬
- deeplearning
- fastapi #python웹개발
- fastapi #파이썬웹개발
- 챗gpt
- pytorch
- fastapi
- langchain
- python 정렬
- Today
- Total
Data Navigator
FastAPI로 이벤트 플래너 만들기 05 - 이벤트 CRUD 구현 - 본문
FastAPI로 이벤트 플래너 만들기 05
- 이벤트 CRUD 구현 -
SQLModel과 sqlite로 만든 DB를 이용해 이벤트 데이터에 대한 CRUD를 구현한다.
1. 이벤트 생성 만들기
(1) routes/events.py를 수정해서 신규 이벤트 생성을 담당하는 route를 만든다.
라이브러리를 추가로 import 하고 이벤트 생성 라우트 부분의 내용을 수정한다.
# route/event.py
# Depends, Request를 import하고 database 관련 부분 import
from fastapi import APIRouter, Depends, HTTPException, Request, status
from database.connection import get_session
from models.events import Event, EventUpdate
from typing import List
... 윗쪽 생략
# 이벤트 생성 라우트 - db session에 의존하도록 수정
@event_router.post("/new")
async def create_event(new_event: Event, session=Depends(get_session)) -> dict:
session.add(new_event)
session.commit()
session.refresh(new_event)
return {
"message" : "Event created successfully."
}
(2) python main.py 로 서버를 실행하고 localhost:8000/docs에 접속해 POST /event/new 를 테스트 한다.
try it out을 누르고 테스트 값을 넣었을 때 Event created successfully 가 출력되면 성공이다.
2. 이벤트 조회 만들기
DB에 저장된 이벤트를 모두 불러오거나 id 별로 불러오는 라우터를 만들자.
1) routes/events.py 에서 이벤트 조회 라우트 부분을 찾아 수정한다.
(1) sqlmodel에서 select를 추가로 import 하고 전체 목록을 조회하는 retrieve_all_events 함수를 수정한다.
# route/events.py
# sqlmodel 에서 select 추가 import
from sqlmodel import select
# 전체 이벤트 조회 라우트 수정
@event_router.get("/", response_model=List[Event])
async def retrieve_all_events(session=Depends(get_session)) -> List[Event]:
statement = select(Event)
events = session.exec(statement).all()
return events
(2) 지정한 id의 정보를 표시하는 라우트도 변경한다.
# route/events.py
# id로 이벤트를 조회하는 라우트
@event_router.get("/{id}", response_model=Event)
async def retrieve_event(id: int, session=Depends(get_session)) -> Event:
event = session.get(Event, id)
if event:
return event
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Event with supplied ID does not exist"
)
2) 서버를 실행하고 POST /event/new 에서 이벤트를 여러 개 등록 한 후 GET /event/ Retrieve All Events에서 조회해 보자.
위와 같이 여러 개의 데이터가 조회되면 성공이다.
3) GET /event/{id} Retrieve Event 에서 id에 3을 넣고 조회해 보자.
id 3번에 해당하는 데이터가 잘 조회된다면 성공.
3. 이벤트 업데이트(변경) 하기
1) update 기능을 구현하기 위해서 route/events.py의 update_event 함수를 추가한다.
# route/events.py 에 추가
# 이벤트 수정 라우트
@event_router.put("/edit/{id}", response_model=Event)
async def update_event(id: int, new_data: EventUpdate, session=Depends(get_session))-> Event:
event = session.get(Event, id)
if event:
event_data = new_data.dict(exclude_unset=True)
for key, value in event_data.items():
setattr(event, key, value)
session.add(event)
session.commit()
session.refresh(event)
return event
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Event with supplied ID does not exist"
)
2) 서버를 실행하고 localhost:8000/docs로 가서 PUT /event/edit/{id}에서 try it out을 누르고 id에 1일 입력한 후 내용을 수정해 보자. description 내용과 title을 이벤트 플래너 데이터 샘플 1 수정으로 고치고 excute를 누른다.
위와 같이 code 200이 나오면서 변경한 내용이 반영 되면 성공.
GET /event/retrieve/{id} 로 가서 try it out을 누르고 id에 1번을 넣어서 다시 한 번 확인해 보자.
title과 description이 이벤트 플래너 데이터 샘플1 수정으로 잘 변경 되어있는 것을 확인 할 수 있다.
4. 이벤트 삭제하기
route/enevts.py에 있는 delete_event 함수를 수정해서 이벤트를 삭제도록 만들자.
# route/events.py
# 단일 이벤트 삭제 라우트 수정
@event_router.delete("/delete/{id}")
async def delete_event(id: int, session=Depends(get_session)) -> dict:
event = session.get(Event, id)
if event:
session.delete(event)
session.commit()
return {
"message" : "Event deleted successfully."
}
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Event with supplied ID does not exist"
)
localhost/8000/docs에서 DELETE /event/delete/{id} 로 가서 try it out 을 누르고 id 1번을 입력해 id 1번 이벤트를 삭제해 보자.
삭제가 정상적으로 되었다면 Event delete sucessfully. 가 출력된다.
다시 확인을 위해서 GET /event/retrieve/{id} 로 가서 try it out을 누르고 id에 1번을 넣어서 다시 한 번 확인해 보자.
id 1번 이벤트를 삭제했으므로 Event with supplied ID does not exist가 출력되어야 정상이다.
출처: 아데시나, 압둘라지즈 압둘라지즈. FastAPI를 사용한 파이썬 웹 개발. 번역 김완섭. 한빛미디어, 2023
'FastAPI' 카테고리의 다른 글
FastAPI로 이벤트 플래너 만들기 04 - DB 연결하기 (0) | 2024.05.12 |
---|---|
FastAPI로 이벤트 플래너 만들기 03 - 라우트 구현 - (0) | 2024.05.12 |
FastAPI로 이벤트 플래너 만들기 02 - 모델 구현 - (0) | 2024.05.12 |
FastAPI로 이벤트 플래너 만들기 01 - 환경설정 및 기본 구조 생성 - (0) | 2024.05.12 |
FastAPI 설치 환경 세팅 및 간단한 테스트 웹 만들기10 - home.html, todo.html 만들기 (0) | 2024.05.12 |