Python SqlAlchemy按DateTime排序?

53

我正在使用SqlAlchemy来存储一些带有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文档指出使用“ - ”来反转顺序,但我肯定在这里忽略了什么。

有人可以帮忙吗?

3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
96

你可以这样做:

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

你可能需要:

from sqlalchemy import desc

这里有一些文档

另一个选择是:

stmt = select([users_table]).order_by(users_table.c.name.desc())

我的数据库执行这个操作非常慢,有没有更快的方法? - kalu
@kalu:你是否使用了适当的索引?尝试查看生成的SQL并对其进行分析。 - thirtydot
@thirtydot 有没有办法选择行号之间的记录,而不是仅限于3条之类的限制?比如我们有100条记录,我需要按名称降序排列从第10行到第20行的数据。 - Kishor kumar R
1
@KishorkumarR:您需要使用 offset() 结合 limit()(或 slice())。请确保您了解它在底层SQL数据库中的工作原理。例如,在MySQL和MSSQL之间就有所不同。此外,您的评论与我的答案实际上无关,请下次提出一个新问题或其他相关问题。 - thirtydot

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

应该可以工作。


2
我更喜欢这种方式,因为它避免了“import”操作。 - jds

3
你可以像这样使用。
from sqlalchemy import desc

db.session.query(MyEntity).order_by(desc(MyEntity.time))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,