2011-01-03 3 views
18

Я использую SQLAlchemy для хранения некоторых объектов с полем DateTime:Python 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

Вы можете сделать это следующим образом:

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

Вам может понадобиться:

from sqlalchemy import desc 

Вот some documentation.

+0

Эта операция в моей базе данных очень медленная. Есть ли более быстрый способ? – kalu

+0

@kalu: Вы используете соответствующие индексы? Попробуйте посмотреть на сгенерированный SQL и профайл. – thirtydot

1

Я регулярно использую sqlalchemy, поэтому я могу подтвердить, что ответ на тридцать верен, вам нужно использовать sqlalchemy.sql.desc вместо оператора -, чтобы повлиять на order_by.

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

должно работать.

+0

Я предпочитаю это, потому что он избегает «импорта». – gwg

Смежные вопросы