Fast API DB 연결

2023. 10. 23. 03:11카테고리 없음

Fast API DB 연결

 클라이언트에서 요청을 받았을 때, DB에 저장되어 있는 데이터를 꺼내 가공해줘야 하는 경우가 많습니다. DB의 데이터에 접근을 하기 위해서는 먼저 DB와 연결을 해야합니다.

 프로젝트 디렉토리에 아래와 같이 'db'라는 디렉토리를 생성합니다. 그 후 방금 생성한 디렉토리에 __init__.py, connection.py 파일을 생성합니다. 여기서 __init__.py 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 합니다.

 아래의 명령어를 터미널에 입력해서 필요한 라이브러리를 다운로드를 합니다.

pip install sqlalchemy
pip install PyMySQL

 connection.py 파일에 아래와 같은 코드를 작성해 봅니다.

from sqlalchemy import *
from sqlalchemy.orm import sessionmaker

app = {
    "name": "mysql+pymysql",
    "user": "유저명",
    "password": "비밀번호",
    "host": "호스트",
    "port": "포트",
    "database": "데이터베이스 이름"
}

conn_string = f'{app["name"]}://{app["user"]}:{app["password"]}@{app["host"]}:{app["port"]}/{app["database"]}'

class engineconn:

    def __init__(self):
        self.engine = create_engine(conn_string, pool_recycle=500)

    def sessionmaker(self):
        Session = sessionmaker(autocommit=False, autoflush=False, bind=self.engine)
        session = Session()
        return session

    def connection(self):
        conn = self.engine.connect()
        return conn

 한글로 되어있는 부분은 본인의 DB 정보에 맞게 작성하면 됩니다. 

 아래와 같이 session을 만들어 db에 접근할 수 있습니다.

from fastapi import APIRouter
from db.connection import engineconn

router = APIRouter(
    prefix="/common"
)

engine = engineconn()
session = engine.sessionmaker()

@router.get("/second")
async def second():
    return {"second": "second"}

@router.get("/third")
async def third():
    return {"third": "third"}

@router.get("/dbdata")
async def dbdata():
    data = session.query("칼럼").filter("조건").all()
    data = session.query("칼럼").all()
    session.close()
    return data