使用SQLAlchemy以ID的顺序获取放在表中的最后几条记录

时间:2015-11-12 22:32:04

标签: python database sqlalchemy flask-sqlalchemy

我有一个表格,我希望按照将它们添加到数据库的顺序获取最后3条记录。我有以下内容:

session.query(User).order_by(User.id.desc()).limit(3)

这会从数据库中获取最后3条记录,但是如果我下载了ID,它们将按向后顺序排列。我希望按顺序记录这些记录,但是使用多个订单查询似乎无法正常工作。

有解决方法或解决方案吗?感谢。

2 个答案:

答案 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)