FastAPI 미니 실습을 진행하다가 예제 Model 파일을 보면서 내가 짜는 코드랑 달라서 찾아봤는데
SQLAlchemy model 정의방식이 새로 나왔다는 것을 알았다.
기존 방식 - Column(1.x)
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, DateTime
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class Todo(Base):
__tablename__ = 'todo'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(100), nullable=False)
description = Column(String(500), nullable=True)
is_done = Column(Boolean, default=False, nullable=False)
priority = Column(Integer, nullable=False)
category_id = Column(Integer, ForeignKey('category.id'), nullable=False)
다들 많이 써본 방식일 것이다.
각 필드를 Column()객체로 선언하고, nullable, default 같은 옵션을 인자로 전달한다.
이 방식은 SQLAlchemy 2.0에서도 동작하지만, 하위 호환성을 유지하기 위해 레거시로 분류했을 뿐 오류는 나지 않는다.
새로운 방식 - Mappend(2.0)
from datetime import datetime, timezone
from sqlalchemy import String, ForeignKey
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Todo(Base):
__tablename__ = 'todo'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
title: Mapped[str] = mapped_column(String(100))
description: Mapped[str | None] = mapped_column(String(500))
is_done: Mapped[bool] = mapped_column(default=False)
priority: Mapped[int]
category_id: Mapped[int] = mapped_column(ForeignKey('category.id'))
가장 눈에 띄는 변화는 python 타입 힌트를 사용한다는 것이다.
타입 힌트
- Python 변수나 함수의 데이터 타입을 명시적으로 표시하는 문법이다.
# 타입 힌트 없음
def add(a,b):
return a+b
#타입 힌트 있음
def add(a :int, b,int) -> int:
return a+b
타입힌트의 특징
- 런타임의 강제되지 않는다.
- 힌트일 뿐, Python이 타입을 체크하지 않는다.
- 정적분석도구나 IDE가 타입오류를 미리 잡아준다.
- Column방식은 이를 할 수 없었다.
- 코드 가독성과 자동완성 품질이 올라간다.
SQLAlchemy에서의 타입힌트
위 코드에서는 Mapped[T]를 대표적으로 볼 수 있다.
해석하자면
이 컬럼은 T type이다 라는 타입 힌트이며, SQLAlchemy가 이걸 읽어서 컬럼정의까지 자동처리하게 된다.
Mapped[str | None] 은 이 컬럼은 str타입이며 nullable=True를 의미한다.
Base 클래스 정의 방식
# 구버전 — 함수 호출로 생성
from sqlalchemy.orm import declarative_base
Base = declarative_base()
# 신버전 — 클래스 상속으로 정의
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
https://leapcell.io/blog/ko/why-sqlalchemy-20-is-the-most-powerful-python-orm-yet
SQLAlchemy 2.0이 가장 강력한 Python ORM인 이유 | Leapcell
SQLAlchemy는 Python 생태계에서 가장 인기 있는 ORM(Object Relational Mapping)입니다. 우아한 디자인을 가지고 있으며, 기본 Core와 상위 레벨의 전통적인 ORM의 두 부분으로 나뉩니다. Python뿐만 아니라 다른
leapcell.io
'Programing' 카테고리의 다른 글
| OpenCV와 Python을 활용한 명함 이미지 보정 (0) | 2026.05.07 |
|---|---|
| 영상처리 입문 (0) | 2026.05.06 |
| Python - Class (0) | 2026.04.17 |
| Python - List (0) | 2026.04.14 |
| 머신러닝 (0) | 2026.04.13 |