2011-01-03 20 views
18

estoy usando sqlalchemy para guardar algunos objetos con un campo DateTime:Python SqlAlchemy order_by DateTime?

my_date = Field(DateTime()) 

me gustaría ejecutar una consulta para recuperar los más recientes algunos objetos (entidades con el campo my_date que son el más reciente) .

He intentado lo siguiente:

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

Pero estas consultas devuelven los mismos objetos en el mismo orden. La documentación de SqlAlchemy señala el uso de '-' para invertir el orden, pero seguramente me falta algo aquí.

¿Alguien puede ayudar?

Respuesta

40

Puede hacerlo de esta manera:

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

Es posible que necesite:

from sqlalchemy import desc 

Aquí es some documentation.

+0

Esta operación es muy lenta en mi base de datos. ¿Hay una manera mas rápida? – kalu

+0

@kalu: ¿Está usando los índices apropiados? Intente mirar el SQL generado y perfilarlo. – thirtydot

1

Uso sqlalchemy con regularidad, así que puedo confirmar que la respuesta de thirtydot es correcta, necesita usar sqlalchemy.sql.desc en lugar del operador - para influir en order_by.

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

debería funcionar.

+0

Prefiero esto porque evita una 'importación'. – gwg