FastAPI는 빠르고 간단한 웹 애플리케이션 프레임워크로서, 데이터베이스와의 상호작용을 위해 ORM(Object Relational Mapping) 라이브러리인 SQLAlchemy와 함께 사용할 수 있습니다. 이번 포스트에서는 FastAPI와 SQLAlchemy를 사용하여 ORM 기능을 구현하는 방법에 대해 알아보겠습니다.
SQLAlchemy 설정하기
먼저, FastAPI에서 SQLAlchemy를 사용하기 위해서는 SQLAlchemy를 설치해야 합니다. 다음 명령어를 사용하여 SQLAlchemy를 설치할 수 있습니다.
pip install sqlalchemy
설치 후, FastAPI 애플리케이션에서 SQLAlchemy를 설정해야 합니다. 예를 들어, main.py
파일에 다음과 같이 설정할 수 있습니다.
from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
app = FastAPI()
# 데이터베이스 연결
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 의존성 주입
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
위 코드에서는 SQLALCHEMY_DATABASE_URL
을 통해 SQLite 데이터베이스에 연결하는 SQLAlchemy engine
을 생성하고, SessionLocal
을 통해 세션을 관리합니다. get_db
함수로 의존성을 주입하여 각 엔드포인트에서 데이터베이스 세션을 사용할 수 있도록 합니다.
ORM 모델 정의하기
다음으로, ORM을 사용하여 데이터베이스를 다루기 위해 모델을 정의해야 합니다. 예를 들어, models.py
파일에 다음과 같이 모델을 정의할 수 있습니다.
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, index=True)
email = Column(String, unique=True, index=True)
password = Column(String)
위 코드에서는 SQLAlchemy의 Column
클래스를 사용하여 각 필드를 정의하고, Base
클래스를 상속받아 모델을 선언합니다.
CRUD 연산 구현하기
마지막으로, FastAPI에서 데이터베이스의 CRUD(Create, Read, Update, Delete) 연산을 구현할 수 있습니다. 예를 들어, main.py
파일에 다음과 같이 연산을 구현할 수 있습니다.
from fastapi import FastAPI, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas
...
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = models.User(username=user.username, email=user.email, password=user.password)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@app.get("/users/{user_id}", response_model=schemas.User)
def read_user(user_id: int, db: Session = Depends(get_db)):
db_user = db.query(models.User).filter(models.User.id == user_id).first()
if db_user:
return db_user
else:
raise HTTPException(status_code=404, detail="User not found")
...
위 코드에서는 User
모델에 대한 생성과 조회 연산을 구현하였습니다. create_user
함수에서는 입력받은 데이터를 기반으로 새로운 사용자를 생성하고 데이터베이스에 저장합니다. read_user
함수에서는 사용자의 user_id
를 기반으로 해당 사용자를 조회합니다.
이와 같이 FastAPI와 SQLAlchemy를 함께 사용하여 ORM 기능을 구현할 수 있습니다. FastAPI의 빠른 속도와 SQLAlchemy의 강력한 ORM 기능을 통해 간편하게 웹 애플리케이션을 개발할 수 있습니다.
#fastapi #sqlalchemy