FastAPI와 연동하여 데이터베이스에 접속하는 방법

이번에는 FastAPI와 데이터베이스를 연동하는 방법에 대해 알아보겠습니다. FastAPI는 Python을 기반으로한 빠르고 간편한 웹 프레임워크로, 데이터베이스를 사용하여 데이터를 저장하고 조회하는 기능을 제공합니다.

데이터베이스 설정

FastAPI와 연동하기 위해서는 먼저 데이터베이스에 대한 설정을 해야합니다. 가장 일반적인 방법은 SQLAlchemy를 사용하여 데이터베이스와 연결하는 것입니다. SQLAlchemy는 Python에서 가장 인기있는 ORM(Object Relational Mapping) 라이브러리 중 하나로, 다양한 데이터베이스 시스템과 호환됩니다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "postgresql://user:password@host:port/dbname"

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

위의 코드에서는 SQLAlchemy create_engine 함수를 사용하여 데이터베이스에 연결합니다. 데이터베이스 URL을 지정하여 데이터베이스에 접속할 수 있습니다. SessionLocal은 데이터베이스 세션을 생성하기 위한 세션 팩토리입니다.

모델 정의하기

다음으로는 데이터베이스에 저장할 모델을 정의해야합니다. 모델은 데이터베이스의 테이블에 매핑되는 Python 클래스입니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True)
    email = Column(String, unique=True)

위의 코드에서 User 클래스는 users 테이블을 나타내고, id, username, email은 해당 테이블의 컬럼을 나타냅니다.

데이터베이스 연동

이제 FastAPI와 데이터베이스 연동을 할 준비가 되었습니다. FastAPI에서 데이터베이스를 사용하기 위해서는 의존성 주입(Dependency Injection)을 사용해야합니다.

from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session

app = FastAPI()

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

@app.get("/users/")
def get_users(db: Session = Depends(get_db)):
    users = db.query(User).all()
    return users

위의 코드에서 get_db 함수는 데이터베이스 세션을 가져오는 함수입니다. get_users 함수에서 db 인자는 get_db 함수를 통해 가져온 데이터베이스 세션을 의존성 주입하여 사용할 수 있습니다. 이렇게 함으로써 FastAPI에서 데이터베이스를 사용할 수 있습니다.

물론 위의 예시는 간단한 예시이며, 실제로 데이터베이스 연동을 할 때에는 다양한 기능과 보안에 대한 고려가 필요합니다. 하지만 이번 글에서는 FastAPI와 데이터베이스 연동의 기본적인 개념과 방법을 알아보았습니다.

#FastAPI #Python