Develop/FastAPI

FastAPI 데이터베이스에 유저 데이터 저장하기 - 46

동석해요 2023. 1. 7. 18:27
728x90
SMALL
앞서 POST API에서 다뤘던 저장은 데이터베이스 저장이 아니었기에 이번장은 데이터베이스에 데이터를 저장해 보자

 

1. DB에 연결하기 위한 라이브러리 import

from sqlalchemy.orm import Session
from database import SessionLocal, engine
#Depends 추가
from fastapi import FastAPI, Depends

 

2. Base를 상속받은 모든 클래스들을 데이터베이스 내에 테이블로 만든다.

models.Base.metadata.create_all(bind=engine)

 

3. DB를 연결할 수 있는 함수 생성

def get_db():
    try:
        db = SessionLocal()
        yield db
    finally:
        db.close()

※ return대신 yield를 사용한 이유

return을 사용하게 되면 하나의 session으로 모든 것을 다루게 되고 yield를 사용하게 되면 요청할 때의 session을 사용할 수 있다.

https://stackoverflow.com/questions/64763770/why-we-use-yield-to-get-sessionlocal-in-fastapi-with-sqlalchemy

 

4. POST API 수정

@app.post("/create/user")
async def create_new_user(create_user: CreateUser, db: Session = Depends(get_db)):
    create_user_model = models.Users()
    create_user_model.email = create_user.email
    create_user_model.username = create_user.username
    create_user_model.first_name = create_user.first_name
    create_user_model.last_name = create_user.last_name

    hash_password = get_password_hash(create_user.password)

    create_user_model.hashed_password = hash_password
    create_user_model.is_active = True

    db.add(create_user_model)
    #db.flush(
    db.commit()

 

5. Swagger 확인

유저 데이터를 생성한다. Response body가 null인 이유는 API가 return 해주는 값이 없기 때문이다.

데이터가 잘 저장되었는지 6번에서 확인해 보자

 

6. 터미널로 데이터베이스 확인

users 테이블을 조회했을 때 저장했던 데이터를 확인할 수 있다.

728x90
SMALL