[python] FastAPI에서 트랜잭션 처리하기
FastAPI는 빠르고 강력한 웹 프레임워크로서 데이터베이스 트랜잭션을 처리하는 데 매우 유용합니다. 이 기사에서는 FastAPI에서 트랜잭션을 처리하는 방법에 대해 살펴보겠습니다.
1. 데이터베이스 연결 설정하기
가장 먼저 해야 할 것은 데이터베이스에 연결하는 것입니다. FastAPI에서 데이터베이스를 연결하는 방법은 여러 가지가 있지만, 가장 흔한 방법은 SQLAlchemy
를 사용하는 것입니다. SQLAlchemy
를 사용하여 데이터베이스에 연결하고 Session
을 만듭니다.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
2. 트랜잭션을 사용하여 데이터 조작하기
이제 Session
을 사용하여 데이터베이스 트랜잭션을 처리할 수 있습니다. FastAPI에서 API 핸들러 함수 내에서 Session
을 사용하여 데이터 조작을 수행하고, 트랜잭션을 커밋하거나 롤백할 수 있습니다.
from fastapi import FastAPI, HTTPException
from sqlalchemy.orm import Session
import models, schemas
app = FastAPI()
@app.post("/items/")
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
db_item = models.Item(**item.dict())
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
위 코드에서 db.commit()
은 트랜잭션을 커밋하는 부분이며, db.rollback()
은 트랜잭션을 롤백하는 부분입니다.
3. 트랜잭션의 에러 처리하기
트랜잭션을 처리하는 동안 에러가 발생할 수 있습니다. 이때는 try-except
문을 사용하여 에러를 처리하고, 롤백하는 것이 좋습니다.
@app.post("/items/")
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
try:
db_item = models.Item(**item.dict())
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
except:
db.rollback()
raise HTTPException(status_code=500, detail="Internal server error")
위 코드에서는 에러가 발생할 경우 트랜잭션을 롤백하고, HTTPException
을 발생시켜 내부 서버 오류를 반환하도록 합니다.
이렇게 FastAPI에서 트랜잭션을 처리하는 방법을 간단히 살펴보았습니다. 효율적인 트랜잭션 처리는 안정적인 데이터베이스 조작을 위해 매우 중요합니다.