我有一个表格,想要按照它们添加到数据库的时间顺序获取最后3个记录。 我有以下内容:
session.query(User).order_by(User.id.desc()).limit(3)
这个代码从数据库中获取了最后3条记录,但是由于我按照ID降序排列,它们的顺序是相反的。我想要按照正常的顺序获取记录,但是使用多个排序查询似乎行不通。
有什么解决办法或者变通方法吗?谢谢。
我有一个表格,想要按照它们添加到数据库的时间顺序获取最后3个记录。 我有以下内容:
session.query(User).order_by(User.id.desc()).limit(3)
这个代码从数据库中获取了最后3条记录,但是由于我按照ID降序排列,它们的顺序是相反的。我想要按照正常的顺序获取记录,但是使用多个排序查询似乎行不通。
有什么解决办法或者变通方法吗?谢谢。
除了使用子查询执行您想要的第二个 order by
来生成SQL之外,我看不到任何其他方法,建议参考此答案:Get another order after limit with mysql
我相信,在SQLAlchemy中你需要像这样做:
session.query(session.query(User).order_by(User.id.desc()).limit(3)\
.subquery().alias('sUser')).order_by('sUser.id')
这是未经测试的代码,我相信你最终会得到一系列KeyedTuple对象,而不是User类的实例,尽管可能有一种方法可以解决这个问题。
然而,既然你正在使用ORM,如果可以用Python完成,我认为在SQLAlchemy子查询中进行这样的操作并没有什么意义。像这样:
reversed(session.query(User).order_by(User.id.desc()).limit(3).all())
或者是这样的:
session.query(User).order_by(User.id.desc()).limit(3).all()[::-1]
事实上,我有一个类似的问题,但当我看到你写的命令时,我意识到我需要做什么,然后它起作用了, 那么: 首先感谢 其次,我认为您需要实现以下命令:
desc3user = User.query.order_by(User.id.desc()).limit(3)
reversed(session.query(User).order_by(User.id.desc()).limit(3))
会返回最近添加的三个用户,按照 id 逆序排列。 - Gerrat