문제

count (), group_by 및 order_by를 사용하여 일대일 가입을 해야하는 몇 가지 기능이 있습니다. SQLALCHEMY.SELECT 기능을 사용하여 ID 세트를 반환하는 쿼리를 생성 한 다음 개별 레코드에서 ORM Select를 수행하기 위해 반복합니다. 내가 궁금해하는 것은 반복을 수행하지 않아도 한 단일 쿼리에서 ORM을 사용하는 방법이 있는지 여부입니다.

다음은 내가 지금하고있는 일의 예입니다. 이 경우 엔티티는 위치 및 가이드이며, 매핑 된 일대일입니다. 관련 가이드 수로 정렬 된 최상위 위치 목록을 얻고 있습니다.

def popular_world_cities(self):
    query = select([locations.c.id, func.count(Guide.location_id).label('count')],
                   from_obj=[locations, guides],
                   whereclause="guides.location_id = locations.id AND (locations.type = 'city' OR locations.type = 'custom')",
                   group_by=[Location.id],
                   order_by='count desc',
                   limit=10)
    return map(lambda x: meta.Session.query(Location).filter_by(id=x[0]).first(), meta.engine.execute(query).fetchall())

해결책

이 작업을 수행하는 가장 좋은 방법을 찾았습니다. 단순히 공급 a from_statement 대신 a filter_by 또는 그와 같은. 그렇게 :

meta.Session.query(Location).from_statement(query).all()
도움이 되었습니까?

해결책 3

이 작업을 수행하는 가장 좋은 방법을 찾았습니다. 단순히 공급 a from_statement 대신 a filter_by 또는 그와 같은. 그렇게 :

meta.Session.query(Location).from_statement(query).all()

다른 팁

당신이하려는 것은 서브 쿼리 [현재 선택 통화에서 만든]와 테이블 사이의 sqlalchemy 조인에 직접지도를 맵핑합니다. 하위 선택에서 순서를 옮기고 COUNT (DESC)의 별도의 레이블이 붙은 열을 생성하려고합니다. 해당 열에서 외부 선택을 주문하십시오.

그 외에는 그다지 끔찍한 것을 많이 보지 못합니다.

나는 이것이 어려운 방법을 발견했지만 sqlalchemy는 지원합니다. group_by. 쿼리 아래의 문서는 그렇게 말하지 않지만 지원합니다. 나는 그것을 사용했습니다!

그리고 당신은 또한 사용할 수 있습니다 order_by. 나는 당신처럼 특별한 수업/쿼리를 만들려고했지만 나는 group_by() 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top