我有一个表格,我希望按照将它们添加到数据库的顺序获取最后3条记录。我有以下内容:
session.query(User).order_by(User.id.desc()).limit(3)
这会从数据库中获取最后3条记录,但是如果我下载了ID,它们将按向后顺序排列。我希望按顺序记录这些记录,但是使用多个订单查询似乎无法正常工作。
有解决方法或解决方案吗?感谢。
答案 0 :(得分:3)
除了使用子查询执行所需的第二个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,那么在SQL级别使用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]
答案 1 :(得分:0)
事实是我有一个类似的问题,但是当我看到你如何编写命令时,我意识到我需要做什么并且它起作用了, 然后: 第一件事谢谢 我认为您需要实现以下命令的第二件事:
desc3user = User.query.order_by(User.id.desc()).limit(3)