2011-01-03 2 views
18

DateTime 필드가있는 일부 개체를 저장하려면 SqlAlchemy를 사용하고 있습니다.파이썬 SqlAlchemy order_by DateTime?

my_date = Field(DateTime()) 

가장 최근의 몇 개 개체 (가장 최근의 my_date 필드가있는 엔터티)를 검색하기 위해 쿼리를 실행하고 싶습니다.

나는 다음을 시도했다 :

entities = MyEntity.query.order_by(MyEntity.time).limit(3).all() 
entities = MyEntity.query.order_by(-MyEntity.time).limit(3).all() 

하지만이 쿼리는 같은 순서로 동일한 객체를 반환한다. SqlAlchemy 문서에서는 '-'를 사용하여 순서를 뒤 바뀌 었음을 기록하지만 여기에 뭔가 빠졌습니다.

아무도 도와 줄 수 있습니까?

답변

40

당신은 이런 식으로 작업을 수행 할 수 있습니다

from sqlalchemy import desc 

여기 some documentation있어 :에

entities = MyEntity.query.order_by(desc(MyEntity.time)).limit(3).all() 

당신은해야 할 수도 있습니다.

+0

이 작업은 데이터베이스가 너무 느립니다. 더 빠른 방법이 있습니까? – kalu

+0

@ kalu : 적절한 색인을 사용하고 있습니까? 생성 된 SQL을보고 프로파일 링하십시오. – thirtydot

1

정기적으로 sqlalchemy를 사용하므로 thirtydot의 대답이 올바른지 확인할 수 있으므로 - 연산자 대신 sqlalchemy.sql.desc을 사용해야 order_by에 영향을 미칠 수 있습니다.

4
entities = MyEntity.query.order_by(MyEntity.my_date.desc()).limit(3).all() 

.

+0

나는'import'를 피하기 때문에 이것을 선호한다. – gwg