[python] FastAPI에서 데이터베이스 연동하기

FastAPI는 Python에서 빠르고 간편한 API를 쉽게 작성할 수 있는 도구입니다. 데이터베이스와의 연동은 대부분의 웹 애플리케이션에서 필요한 기능 중 하나이며, FastAPI에서도 간단하게 데이터베이스를 연동할 수 있습니다.

이 블로그 포스트에서는 FastAPI에서 PostgreSQL 데이터베이스를 연동하는 방법을 알아보겠습니다.

필요한 패키지 설치

FastAPI에서 PostgreSQL 데이터베이스를 사용하기 위해 일부 패키지를 설치해야 합니다. 다음 명령을 사용하여 필요한 패키지를 설치합니다.

pip install fastapi[all]
pip install sqlalchemy
pip install databases
pip install psycopg2

데이터베이스 연결 설정하기

PostgreSQL에 연결하기 위해 databasessqlalchemy 패키지를 사용합니다. 다음과 같이 연결 설정을 할 수 있습니다.

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "postgresql://username:password@localhost:5432/dbname"

engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

위 코드에서 DATABASE_URL의 값을 자신의 PostgreSQL 서버 정보에 맞게 변경해야 합니다.

모델 정의하기

FastAPI에서 데이터베이스를 사용하기 위해서는 ORM(Object-Relational Mapping)를 사용하여 모델을 정의해야 합니다. 다음과 같이 모델을 정의할 수 있습니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.sql import func

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, index=True)
    password = Column(String)
    created_at = Column(
        DateTime(timezone=True), server_default=func.now()
    )

위 예시에서는 User라는 테이블을 정의하고, id, username, password, created_at 필드를 포함하고 있습니다.

데이터베이스 연결 및 CRUD 작업하기

FastAPI에서는 데이터베이스 연결을 위해 Dependency Injection 기능을 사용합니다. 다음과 같이 데이터베이스 연결을 위한 공통 모듈을 만들 수 있습니다.

from sqlalchemy.orm import Session

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

위 코드에서 get_db 함수는 FastAPI의 Dependency Injection 기능을 사용하여 데이터베이스 세션을 반환합니다.

그리고 다음과 같이 FastAPI에서 데이터베이스를 사용할 수 있습니다.

from fastapi import FastAPI, Depends

app = FastAPI()

@app.post("/users/")
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_user = User(username=user.username, password=user.password)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

위 예제에서 /users/ 엔드포인트에 POST 요청을 보내면, create_user 함수가 실행되어 데이터베이스에 새로운 사용자를 추가합니다.

결론

FastAPI에서 데이터베이스와의 연동은 간단하고 쉽게 설정할 수 있습니다. 이번 포스트에서는 PostgreSQL을 예시로 사용하였지만, 다른 데이터베이스와도 비슷한 방법으로 연동할 수 있습니다. 데이터베이스 연동을 통해 좀 더 강력하고 유연한 웹 애플리케이션을 개발할 수 있습니다.

참고 문서: