Flask-SQLAlchemy:尝试以相反的顺序使用 query.paginate()

nei*_*_sw 4 python sqlalchemy flask flask-sqlalchemy

我正在按照 Corey Schafer 的教程使用 SQLAlchemy (flask-sqlalchemy) 制作一个基本的 Flask 网站。该网站使用包含用户和帖子的数据库。目前,我在首页上按从最旧到最新的顺序显示帖子,但我想以相反的顺序显示它们。我知道我可以使用Session.query.all().order_by(),但我想使用分页方法对结果进行分页,但我不知道该怎么做。

我的原始代码使用Session.query.paginate()工作正常,但我想反转结果。

目前,这是我的代码查找主页路由的方式:

@app.route("/home")
def home(page=1):
    page = request.args.get('page', 1, type=int)
    posts = Post.query.paginate(page=page, per_page=5) # this line right here
    return render_template("home.html", posts=posts)
Run Code Online (Sandbox Code Playgroud)

此代码可以很好地在多个页面中显示帖子,但我想反转查询的结果,以便可以以相反的顺序显示帖子。我知道order_by()方法,但我不知道如何使用它以及是否可以将它与paginate()方法一起使用。

cal*_*ini 5

您的答案是肯定的,您可以在对查询进行排序后使用分页order_by。按照降序排列,您可以将该方法传递desc()给您的order_by.

例如:

@app.route("/home")
def home(page=1):
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.id.desc()).paginate(page=page, per_page=5) # this line right here
    return render_template("home.html", posts=posts)
Run Code Online (Sandbox Code Playgroud)

我使用了 columnd id,但您可以按数据库中的任何列进行排序。