
sqlalchemy쿼리구문 스타일에는 두가지로 나뉜다.
1.0스타일2.0스타일
SQLAlchemy 버전이 2.0으로 되면서 바뀐 2.0 스타일이 기존 database에서 조회하는 방식과 유사한 방식이라 이질감이 덜하다. 2.0에서 1.0 스타일도 지원하기에 혼용해서 사용해도 무방하다.
최신버전의 스타일인
2.0스타일
select(UserEntity)
.join(UserRoleEntity, UserEntity.uid == UserRoleEntity.uid)
.where(UserRoleEntity.role_id.in_(user_role))
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
고전적인
1.0스타일
select_user = (
self.session.query(UserEntity)
.join(UserRoleEntity, UserEntity.UID == UserRoleEntity.UID)
.filter(UserRoleEntity.role_id.in_(user_role))
.all()
)