Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQLAlchemy按ID的顺序获取放入表中的最后几条记录_Python_Database_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

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

Python 使用SQLAlchemy按ID的顺序获取放入表中的最后几条记录,python,database,sqlalchemy,flask-sqlalchemy,Python,Database,Sqlalchemy,Flask Sqlalchemy,我有一个表,我想从中获取最后3条记录,按它们添加到数据库的时间顺序排列。我有以下资料: session.query(User).order_by(User.id.desc()).limit(3) 这将从数据库中获取最后3条记录,但它们的顺序是向后的,我降低了ID。我希望将记录按顺序排列,但使用多个顺序查询似乎不起作用 有解决办法吗?谢谢。除了使用子查询执行所需的第二个order by来生成此答案所建议的SQL之外,我看不到任何其他方法: 我相信在SQLAlchemy中,您必须执行以下操作: s

我有一个表,我想从中获取最后3条记录,按它们添加到数据库的时间顺序排列。我有以下资料:

session.query(User).order_by(User.id.desc()).limit(3)
这将从数据库中获取最后3条记录,但它们的顺序是向后的,我降低了ID。我希望将记录按顺序排列,但使用多个顺序查询似乎不起作用


有解决办法吗?谢谢。

除了使用子查询执行所需的第二个
order by
来生成此答案所建议的SQL之外,我看不到任何其他方法:

我相信在SQLAlchemy中,您必须执行以下操作:

session.query(session.query(User).order_by(User.id.desc()).limit(3)\
.subquery().alias('sUser')).order_by('sUser.id')
这是未经测试的代码,我敢肯定最终会得到一系列KeyedTuple对象,而不是用户类的实例,尽管可能有办法解决这个问题

但是,当您使用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]

事实上,我也有类似的问题,但当我看到你如何编写命令时,我意识到我需要做什么,并且它起了作用, 然后: 第一件事,谢谢 第二件事,我认为您需要实现以下命令:

desc3user = User.query.order_by(User.id.desc()).limit(3)

已反转(session.query(User).order_by(User.id.desc()).limit(3))
?@Gerrat刚刚尝试了一下,得到一个错误,说明查询没有len()。