[Python] SQLAlchemy 쿼리 레포지토리 -3

제이브로·2025년 1월 7일
0

Python

목록 보기
20/21
post-thumbnail

1. SQLAlchemy query

sqlalchemy 쿼리구문 스타일에는 두가지로 나뉜다.

  • 1.0 스타일
  • 2.0 스타일

SQLAlchemy 버전이 2.0으로 되면서 바뀐 2.0 스타일이 기존 database에서 조회하는 방식과 유사한 방식이라 이질감이 덜하다. 2.0에서 1.0 스타일도 지원하기에 혼용해서 사용해도 무방하다.

2. SQLAlchemy 2.0

최신버전의 스타일인 2.0 스타일

select(UserEntity)
	.join(UserRoleEntity, UserEntity.uid == UserRoleEntity.uid)
    .where(UserRoleEntity.role_id.in_(user_role))

2.1 전체 코드

def select_user_by_user_role(self, user_role):
	"""
    Select user by user role

	:param user_role: tuple of user role ids
	:return: List of user by user role from tbl_user
	"""
	try:
		select_user = (
			select(UserEntity)
				.join(UserRoleEntity, UserEntity.uid == UserRoleEntity.uid)
    			.where(UserRoleEntity.role_id.in_(user_role))
		)
		self.logger.info(
			f"[SELECT] select_user_by_user_role: UserEntity, UserRoleEntity\n"
			f"# users: {len(select_user)}"
		)
		return select_user
	except Exception as e:
		self.logger.error(
			f"[ERROR] select_user_by_user_role: UserEntity, UserRoleEntity\n"
			f"# Error: {e}"
		)
		raise

3. SQLAlchemy 1.0

고전적인 1.0 스타일

select_user = (
	self.session.query(UserEntity)
	.join(UserRoleEntity, UserEntity.UID == UserRoleEntity.UID)
	.filter(UserRoleEntity.role_id.in_(user_role))
	.all()
)

4. References

  1. daco2020 tistory
profile
기록하지 않으면 기록되지 않는다.

0개의 댓글

관련 채용 정보