Flask中SQLite查询预期返回2条结果仅得到1条的问题
问题原因及修复方案
你的代码里有两个关键问题导致只返回1条结果:
错误截断了查询结果
userProducts = userProducts[0]这行代码把fetchall()返回的完整结果列表(包含两条记录的列表)直接替换成了列表里的第一个元素(单个元组),导致后续循环只能遍历这个单个元组的内容,自然只能处理1条数据。未正确提取productID
fetchall()返回的每个元素是元组格式(比如(1,)),直接转字符串会得到类似'(1,)'的内容,这会导致后续查询products表时可能匹配不到正确数据(如果id是整数类型的话)。
修正后的代码:
@app.route("/", methods=["GET", "POST"]) @login_required def index(): # 获取当前用户的所有productID userProductsRaw = db.execute("SELECT productID FROM userProducts WHERE userID = ?", str(session["user_id"])) userProducts = userProductsRaw.fetchall() products= [] # 遍历用户的所有产品ID,查询产品详情 for userProduct in userProducts: # 从元组中提取productID,确保是正确的数值类型 productID = userProduct[0] print("test:", productID) productRaw = db.execute("SELECT * FROM products WHERE id = ?", (productID,)) product = productRaw.fetchone() if product: # 避免查询不到产品时添加None products.append(product) print(products) # 将产品列表传递给前端页面 return render_template("index.html", products=products)
修正说明:
- 移除了
if len(userProducts) > 0: userProducts = userProducts[0]这行错误代码,保留完整的查询结果列表。 - 遍历
userProducts时,通过userProduct[0]提取元组中的productID值,确保类型正确(比如整数类型直接传递给后续查询)。 - 添加了
if product:判断,防止查询不到对应产品时向列表中添加None值,避免前端渲染出错。
内容的提问来源于stack exchange,提问作者Boriscodes
相关产品推荐
相关产品推荐

