Flask原生API仅返回单条帖子,如何获取数据库全部帖子?
解决Flask API只返回第一条帖子的问题
嘿,我明白你遇到的问题啦!你现在只能拿到第一条帖子,核心原因是你在for循环里直接用了return——函数一旦执行return语句就会立刻终止,循环只跑了第一次就结束了,后面的帖子根本没机会被处理~
咱们来修改一下代码,先把所有帖子的信息收集到一个列表里,最后再统一返回:
from .db import get_db from flask import jsonify, Blueprint bp = Blueprint("api", __name__, url_prefix="/api") @bp.route("/posts", methods=("GET",)) def get_posts(): db = get_db() # 把SQL语句拆成多行更易读,不影响执行 posts = db.execute( 'SELECT p.id, title, body, created, author_id, username' ' FROM post p JOIN user u ON p.author_id = u.id' ' ORDER BY created DESC' ).fetchall() # 初始化一个空列表,用来存放所有帖子的字典数据 all_posts = [] for post in posts: # 把每个帖子的信息转成字典,添加到列表中 all_posts.append({ "title": post["title"], "body": post["body"], "author": post["username"] }) # 最后返回整个列表的JSON响应,这样前端就能拿到所有帖子啦 return jsonify(all_posts)
简单说下改动点:
- 新增了
all_posts列表,用来存储所有帖子的结构化数据 - 循环里不再直接return,而是把每个帖子的字典追加到列表中
- 循环结束后,用
jsonify返回整个列表,这样就会生成一个JSON数组,包含所有帖子的信息
这样修改后,你的API就能返回数据库里所有帖子的JSON响应啦~
内容的提问来源于stack exchange,提问作者zaeem sadiq
相关产品推荐
相关产品推荐

