약 7분
읽기 설정
글자 크기
줄 간격
글꼴
7.2 SQLAlchemy ORM 이해
이번 장에서는 SQLAlchemy ORM(Object Relational Mapping)을 활용하여 데이터베이스와 객체 지향 프로그래밍(OOP) 간의 매핑을 이해하고, FastAPI와 함께 실제 CRUD 작성을 통해 활용하는 방법을 배웁니다. SQLAlchemy는 Python에서 가장 많이 사용되는 ORM 중 하나이며, 데이터베이스와의 상호작용을 아주 쉽게 만들어 줍니다.
기본 구성 요소
SQLAlchemy는 크게 두 가지 부분으로 나눌 수 있습니다: Core와 ORM. Core는 SQL을 직접 다루는 방식이고, ORM은 Python 객체와 데이터베이스 테이블 간의 매핑을 쉽게 해주는 기능입니다. 본 강의에서는 ORM 위주로 다뤄보겠습니다.
설치
먼저 필요한 라이브러리를 설치해보겠습니다. FastAPI와 SQLAlchemy를 설치하기 위해 다음 명령어를 사용합니다:
pip install fastapi uvicorn sqlalchemy databases[mysql]
모델 정의
ORM을 사용하여 데이터베이스의 테이블을 Python 클래스와 매핑합니다. 예를 들어, 사용자를 저장하기 위한 User 모델을 정의해보겠습니다.
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
email = Column(String, unique=True, nullable=False)
# DB 엔진 생성
engine = create_engine('mysql+mysqlconnector://username:password@localhost:3306/dbname')
Base.metadata.create_all(engine)
데이터베이스 세션 생성
SQLAlchemy에서 데이터 생성, 조회, 수정, 삭제(CRUD) 작업을 하려면 세션을 사용해야 합니다. 다음은 세션을 만드는 방법입니다.
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 데이터베이스 세션을 생성하는 함수
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
CRUD 작업 수행
이제 FastAPI를 사용하여 CRUD API를 생성해보겠습니다. 사용자를 추가하고 조회하는 API를 만들어 보겠습니다.
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
app = FastAPI()
@app.post('/users/', response_model=User)
def create_user(user: User, db: Session = Depends(get_db)):
db.add(user)
db.commit()
db.refresh(user)
return user
@app.get('/users/{user_id}', response_model=User)
def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == user_id).first()
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user
이제 기본 CRUD API가 설정되었습니다. 실제로 FastAPI 서버를 실행하여 데이터를 추가하고 조회해보세요.
실습 과제
- PostgreSQL 또는 MySQL과 같은 다른 데이터베이스를 사용하여 동일한 CRUD 작업을 구현해보세요.
- 사용자 정보를 업데이트하는 API 엔드포인트를 추가해보세요.
- 사용자를 삭제하는 API를 생성해보세요.
퀴즈
- SQLAlchemy에서 ORM이란 무엇인가요? 간단히 설명하세요.
- CRUD는 무엇의 약자로 어떤 기능을 제공하나요?
이번 강의를 통해 SQLAlchemy ORM의 기본적인 사용법과 FastAPI와의 통합을 이해하게 되었을 것입니다. 다음 장에서는 JWT 토큰 인증에 대해 알아보겠습니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.