Python/Today
SQLAlchemy 1.3 vs 2.0 차이점
DGeon
2025. 8. 25. 09:22
✅ SQLAlchemy 1.3 vs 2.0 차이점
| 구분 | 1.3 버전 (기존) | 2.0 버전 (신규) |
| ORM 선언 | Column, relationship을 직접 클래스 속성에 할당 | Mapped, mapped_column()을 활용해 타입 힌트 기반 선언 |
| 세션 관리 | Session = sessionmaker(bind=engine) 후 session = Session() | with Session(engine) as session: 같은 컨텍스트 매니저 사용 권장 |
| 쿼리 API | session.query(User).filter(User.name=="a") | session.execute(select(User).where(User.name=="a")) |
| 쿼리 반환값 | ORM 객체 리스트 바로 반환 | Result 객체 반환 → .scalars().all() 같은 변환 필요 |
| 타입 힌트 지원 | 사실상 거의 없음 | 정식 지원 (Mapped, Annotated, mypy/pyright 호환) |
| 동기/비동기 지원 | 동기만 (async는 별도 라이브러리 필요) | 공식적으로 AsyncSession, async_engine 지원 |
| Declarative Base | Base = declarative_base() | class Base(DeclarativeBase) (클래스 기반) |
| 자동 flush | 세션 조작 시 flush 방식이 다소 불명확 | flush, commit 동작을 더 명확하게 개선 |
| 관계 정의 | 그냥 relationship()만 사용 | Mapped[List["Child"]] = relationship(...) 식으로 타입힌트와 함께 |
| 문법 스타일 | 1.x Legacy 스타일 (계속 지원은 됨) | 2.0 스타일 권장, 1.x 스타일은 deprecated 예정 |