[SQLAlchemy] 1.x와 2.0의 Query 스타일

Jaehyeong Kwon·2023년 3월 7일
0

데이터베이스

목록 보기
8/10

여러 코드를 보던 중에 SQLAlchemy를 사용하더라도 스타일이 다른 것을 보게되었다. 어떤 코드에서는 session.query를 어떤 코드에서는 직접적으로 select, update, delete를 session.execute를 통해 query를 진행하는 경우가 있습니다.

검색해본 결과 sqlalchemy의 버전이 2.0으로 올라오면서 스타일이 바뀌었다고 합니다. 공식 문서에서는 기존 스타일의 ORM을 제거할 계획이 없다고 합니다.
하지만 동기적으로 사용할 때는 문제없지만 비동기로 구현할 경우 AsyncSession 클래스는 Session.query()를 지원하지 않는다고 합니다. FASTapi를 사용하고 공부하고 있기 때문에 비동기적 특성을 포기할 수 없어 2.0 문법을 공부해볼겸 정리해볼까 합니다.

간략한 차이점은 아래 표에서 보실 수 있습니다.

1.x 스타일2.0 스타일레퍼런스
session.query(User).get(42)session.get(User,42)get() method moves to Session
session.query(User).filter(User.name == 'sone').one()session.execute(select(User).filter(User.name == "some user").scalar_one()Unified with Core Select, Result.scalar_on()
session.query(User).all()session.execute(select(User)).scalars().all()session.scalars()
session.query(User).join(Address).filter(Address.email == 'a@a.com').all()session.scalars(select(User).join(Address).where(Address.email == 'a@a.com')).scalars().all()1.x 2.0
session.query(User).count()session.scalar(select(func.count()).select_from(User)))session.scalar()

대표적인 몇 개만 정리를 해두었고, 추가적인 부분은 차차 추가해나갈 예정입니다.

profile
나무와 같이 성장하는 사람

0개의 댓글