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