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 예정