2012-05-17 4 views
1

ORM 쿼리 (예 : MyObject.query())의 결과는 데이터베이스에없는 값 (즉, 별도의 데이터베이스)을 기반으로하는 순위 알고리즘에 따라 정렬해야합니다. 검색 엔진). 즉, 'order_by'는 데이터베이스 내의 필드에서만 작동하기 때문에 작동하지 않습니다.외부 순위에 따라 SQLAlchemy 쿼리 결과의 순서 변경

그러나 쿼리에 제약 조건을 추가 할 수 있도록 유지하기 위해 쿼리 결과를 목록으로 변환 한 다음 다시 정렬하지 않으려합니다. 예 :

results = MyObject.query() 
results = my_reorder(results) 
results = results.filter(some_constraint) 

SQLAlchemy를 통해이 작업을 수행 할 수 있습니까?

+0

* 신청 가치 *에 대해 자세히 설명해 주시겠습니까? – van

+0

응용 프로그램 값을 반영하도록 편집 됨 – muckabout

답변

2

이 데이터베이스의 인 개체 테이블 및/또는 관련 개체 테이블의 필드에서 주문을 파생시킬 수없는 경우가 아니면 두려워 할 것입니다.

그러나 코드에서 튜플 (query, order_func/result)을 반환 할 수 있습니다. 이 경우 쿼리는 실행될 때까지 계속 확장 한 다음 의지 할 수 있습니다. 또는이 튜플을 포함하는 작은 Proxy과 같은 클래스를 만들고 쿼리 확장 메서드를 쿼리에 위임하고 쿼리 실행 메서드 (all(), __iter__, ...)를 쿼리에 적용하고 실행시 정렬 순서를 적용 할 수 있습니다.

또한 각 MyObject 인스턴스의 값을 미리 계산할 수있는 경우 값이있는 literal 열을 쿼리에 추가 한 다음 order_by을 사용하여 순서를 지정할 수 있습니다. 또는 임시 테이블을 추가하고 계산 된 정렬 값이있는 행을 추가 한 다음 쿼리에 조인하고 순서를 추가하십시오. 그러나 나는 이것이 그들이 가져다주는 이익보다 더 복잡한 것을 추가하고 있다고 생각합니다.