0
어떤 이유로 sqlalchemy에서 수동 조인 (Query.join not joinedload)을 사용했습니다. 하나의 테이블에 여러 개의 조인이 있으므로 별칭을 사용했습니다. 이제 관계의 필드 중 하나에 의해 결과를 정렬하고 싶습니다. 별칭 이름으로 Query.order_by를 어떻게 사용할 수 있습니까? 이 작업을 수행 할 때 쿼리의 필드 이름 대신 모호한 % (####)가 표시됩니다.sqlalchemy의 조인 별칭으로 정렬
if self.order_by:
entity = self.cls
for field, order in self.order_by:
if '.' in field:
m = re.match(r'(.+)\.(.+)', field)
if m.group(1) not in self.aliases:
for item in m.group(1).split('.'):
cls = inspect(entity)
attr = cls.attrs[item]
entity = get_type(attr)
if attr.innerjoin:
aliased_entity = aliased(entity)
self.aliases[m.group(1)] = aliased_entity
_query = _query.join(aliased_entity, item).options(contains_eager(item,
alias=aliased_entity))
else:
aliased_entity = aliased(entity)
self.aliases[m.group(1)] = aliased_entity
_query = _query.outerjoin(aliased_entity, item).options(contains_eager(item,
alias=aliased_entity))
if order == "desc":
_query = _query.order_by(self.get_order_by_field(field).desc())
else:
_query = _query.order_by(self.get_order_by_field(field).asc())
: 그리고
def get_order_by_field(self, field: str) -> Column:
if '.' in field:
m = re.match(r'(.+)\.(.+)', field)
if m.group(1) in self.aliases:
return getattr(self.aliases[m.group(1)], m.group(2))
else:
return Column(self.column_map[field])
else:
return Column(field)
나는 여기에 코드의 일부를 넣어해야합니다. 위의 검토. – Kamyar