FastAPI는 Python에서 빠르고 간편한 API를 쉽게 작성할 수 있는 도구입니다. 데이터베이스와의 연동은 대부분의 웹 애플리케이션에서 필요한 기능 중 하나이며, FastAPI에서도 간단하게 데이터베이스를 연동할 수 있습니다.
이 블로그 포스트에서는 FastAPI에서 PostgreSQL 데이터베이스를 연동하는 방법을 알아보겠습니다.
필요한 패키지 설치
FastAPI에서 PostgreSQL 데이터베이스를 사용하기 위해 일부 패키지를 설치해야 합니다. 다음 명령을 사용하여 필요한 패키지를 설치합니다.
pip install fastapi[all]
pip install sqlalchemy
pip install databases
pip install psycopg2
데이터베이스 연결 설정하기
PostgreSQL에 연결하기 위해 databases
와 sqlalchemy
패키지를 사용합니다. 다음과 같이 연결 설정을 할 수 있습니다.
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을 예시로 사용하였지만, 다른 데이터베이스와도 비슷한 방법으로 연동할 수 있습니다. 데이터베이스 연동을 통해 좀 더 강력하고 유연한 웹 애플리케이션을 개발할 수 있습니다.
참고 문서: