如何在 Flask-SQLAlchemy 中执行多个“ order_by”?

假设我有一个字段为 popularitydate_createdUser模型:

SELECT * FROM user ORDER BY popularity DESC, date_created DESC LIMIT 10

在 SQLAlchemy 中,只有一种方法是有效的:

User.query.order_by(User.popularity.desc()).limit(10).all()

我应该只是添加另一个 order_by()? 或把两个 popularitydate_created在我目前的 order_by()

我希望 popularity优先于 date_created订购。

64584 次浏览

这个应该可以

User.query.order_by(User.popularity.desc(), User.date_created.desc()).limit(10).all()

你还可以做的是:

from sqlalchemy import and_, or_
User.query.order_by(and_(User.popularity.desc(), User.date_created.desc())).all()

注意: and_or_来自 sqltancy 库,而不是 flask _ sqltancy 库。 Sql伟力是 flask _ sql伟力的一个依赖项,所以您应该是好的。

LTS: 您可以混合 sql伟力 lib 和 flask _ 伟力 lib

我还有一个例子:

user = User.query.order_by(User.id.desc()).limit(10).all()


s.t

用户是我的类 db.Modle

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

from sqlalchemy.sql import text


User.query.order_by(text("popularity desc, date_created desc")).limit(10).all()