python_fastapi

강의 7: CRUD 작업 구현

알세지 2024. 5. 28. 00:35

강의 7: CRUD 작업 구현

강의 목표

  • CRUD(Create, Read, Update, Delete) 작업을 구현하는 방법을 이해합니다.
  • CRUD 작업을 수행하는 API 엔드포인트를 생성합니다.

준비물

  • 이전 강의에서 설정한 FastAPI 프로젝트

실습 예제

  1. crud.py 파일에 아래의 CRUD 함수를 추가합니다.

     def get_users(db: Session, skip: int = 0, limit: int = 10):
         return db.query(models.User).offset(skip).limit(limit).all()
    
     def get_user(db: Session, user_id: int):
         return db.query(models.User).filter(models.User.id == user_id).first()
    
     def update_user(db: Session, user_id: int, user: schemas.UserUpdate):
         db_user = db.query(models.User).filter(models.User.id == user_id).first()
         if db_user is None:
             return None
         for var, value in vars(user).items():
             setattr(db_user, var, value) if value else None
         db.add(db_user)
         db.commit()
         db.refresh(db_user)
         return db_user
    
     def delete_user(db: Session, user_id: int):
         db_user = db.query(models.User).filter(models.User.id == user_id).first()
         if db_user is None:
             return None
         db.delete(db_user)
         db.commit()
         return db_user
  2. main.py 파일에 CRUD 엔드포인트를 추가합니다.

     @app.get("/users/", response_model=List[schemas.User])
     def read_users(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
         users = crud.get_users(db, skip=skip, limit=limit)
         return users
    
     @app.get("/users/{user_id}", response_model=schemas.User)
     def read_user(user_id: int, db: Session = Depends(get_db)):
         db_user = crud.get_user(db, user_id=user_id)
         if db_user is None:
             raise HTTPException(status_code=404, detail="User not found")
         return db_user
    
     @app.put("/users/{user_id}", response_model=schemas.User)
     def update_user(user_id: int, user: schemas.UserUpdate, db: Session = Depends(get_db)):
         db_user = crud.update_user(db, user_id=user_id, user=user)
         if db_user is None:
             raise HTTPException(status_code=404, detail="User not found")
         return db_user
    
     @app.delete("/users/{user_id}", response_model=schemas.User)
     def delete_user(user_id: int, db: Session = Depends(get_db)):
         db_user = crud.delete_user(db, user_id=user_id)
         if db_user is None:
             raise HTTPException(status_code=404, detail="User not found")
         return db_user
  3. schemas.py 파일에 UserUpdate 모델을 추가합니다.

     class UserUpdate(BaseModel):
         name: str = None
         age: int = None
         email: str = None

추가 실습

  • 더 복잡한 CRUD 작업을 구현해 보세요.