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

Pav*_*dhu 5 python database sqlalchemy flask-sqlalchemy

我有一个表,我想按照添加到数据库的时间顺序获取最后 3 条记录。我有以下内容:

session.query(User).order_by(User.id.desc()).limit(3)
Run Code Online (Sandbox Code Playgroud)

这会从数据库中获取最后 3 条记录,但是如果我降序排列 ID,则它们的顺序是倒序的。我希望按顺序排列记录,但是使用多个订单查询似乎不起作用。

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

Ped*_*eck 7

除了使用子查询来执行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')
Run Code Online (Sandbox Code Playgroud)

这是未经测试的代码,我很确定您最终会得到一系列 KeyedTuple 对象,而不是 User 类的实例,尽管可能有一种方法可以解决这个问题。

然而,当您使用 ORM 执行此操作时,如果您可以使用 Python 执行此操作,那么在 SQL 级别使用 SQLAlchemy 子查询执行此操作没有多大意义。就像是:

reversed(session.query(User).order_by(User.id.desc()).limit(3).all())
Run Code Online (Sandbox Code Playgroud)

或者甚至是这样,如果你想要一个列表而不是反向迭代器:

session.query(User).order_by(User.id.desc()).limit(3).all()[::-1]
Run Code Online (Sandbox Code Playgroud)