多个order_by sqlalchemy/Flask

Noé*_*ieu 44 postgresql sqlalchemy flask flask-sqlalchemy

我正在使用Flask和SQLAlchemy.

假设我有一个用户模型,其中包含字段'popular'和'date_created'.我想做以下查询:

SELECT * FROM user ORDER BY popularity DESC, date_created DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

如何在SQLAlchemy中执行多个order_by?对于单个,这适用:

User.query.order_by(User.popularity.desc()).limit(10).all()
Run Code Online (Sandbox Code Playgroud)

我应该添加另一个order_by吗?或者将流行度和date_created都放在我当前的order_by中?我希望人气在date_created上优先订购.

非常感谢你!

cod*_*eek 78

这应该工作

User.query.order_by(User.popularity.desc(),User.date_created.desc()).limit(10).all()
Run Code Online (Sandbox Code Playgroud)

  • 好的,实际上两个都给了我相同的答案,我发现了基础的SQL查询(感谢http://stackoverflow.com/questions/4617291/how-do-i-get-a-raw-compiled-sql-query -from-a-sqlalchemy-expression)他们确实是相同的,也是正确的.对不起,非常感谢你的回答! (6认同)
  • 对于任何想知道“order_by(o1).order_by(o2)”和“order_by(o1, o2)”之间是否有区别的人来说,没有区别。在第一种情况下,我认为它会被第二个“order_by”覆盖,但没有。它的工作正如预期的那样。 (3认同)

小智 8

你也可以sqlalchemy.sql.text像这样使用:

from sqlalchemy.sql import text

User.query.order_by(text("popularity desc, date_created desc")).limit(10).all()
Run Code Online (Sandbox Code Playgroud)


Yet*_*uck 5

你还可以做什么:

from sqlalchemy import and_, or_
User.query.order_by(and_(User.popularity.desc(), User.date_created.desc())).all()
Run Code Online (Sandbox Code Playgroud)

注意:and_or_来自 sqlalchemy 库,而不是来自flask_sqlalchemy 库。sqlalchemy 是flask_sqlalchemy 的依赖项,所以你应该很好。

LTS:您可以将 sqlalchemy lib 与flask_alchemy lib 混合使用