Flask SQLAlchemy中如何按数值大小查询获取最新帖子
Flask SQLAlchemy 按数值时间戳查询最新帖子实现方法
需求核心是对数值类型的Unix时间戳字段做降序排序(数值越大越靠前,即最新帖子优先),直接在查询链中加入排序规则即可,不需要额外做类型转换。
核心修改逻辑
- SQLAlchemy 原生支持数值类型字段排序,直接调用
order_by()方法即可按字段数值大小比对排序,不需要额外做格式转换 - 时间戳数值越大代表发布时间越新,对时间戳字段调用
.desc()方法做降序排列,即可实现最新帖子排在最前的效果 - 注意查询链顺序:先过滤筛选 -> 再排序 -> 最后分页,如果先分页再排序,排序范围仅限当前分页内的条目,会出现排序结果错乱的问题
代码修改示例
首先确认你的posts模型中存储Unix时间戳的字段名(示例中用create_timestamp指代,请替换为你代码里实际的字段名),修改首页路由中的查询部分即可:
@app.route("/", methods=["GET", "POST"]) def home(): if request.method == "POST": postToBoard(1, request.form["content"], request.form["post_name"]) user = None if "user" in session: user = session["user"] # 核心修改:加入按时间戳降序排序,同时支持从URL参数动态获取页码 home_posts = posts.query.filter_by(board=1)\ .order_by(posts.create_timestamp.desc())\ .paginate( page=request.args.get('page', 1, type=int), per_page=25, error_out=False ) if "user" in session: return render_template("index.html", all_posts=home_posts, header=f"Welcome back, {user}.", values=home_posts, name=website_name) else: return render_template("index.html", all_posts=home_posts, header=f"Welcome to {website_name}.", values=home_posts, name=website_name)
补充说明
- 示例中将原本写死的页码
1调整为从URL的page参数动态获取,访问/?page=2即可拿到第二页帖子,不需要额外修改路由逻辑,适配分页组件的常规用法 - 如果后续需要查询最早发布的帖子,只需要把
.desc()替换为.asc()做升序排列即可
内容的提问来源于stack exchange,提问作者wideey
相关产品推荐
相关产品推荐

