You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中SQLite查询预期返回2条结果仅得到1条的问题

问题原因及修复方案

你的代码里有两个关键问题导致只返回1条结果:

  1. 错误截断了查询结果
    userProducts = userProducts[0] 这行代码把fetchall()返回的完整结果列表(包含两条记录的列表)直接替换成了列表里的第一个元素(单个元组),导致后续循环只能遍历这个单个元组的内容,自然只能处理1条数据。

  2. 未正确提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:20:09