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

Flask+SQLite搜索函数异常:无结果显示及SQL绑定错误

Flask搜索功能故障排查与修复

核心问题梳理

你的搜索功能出现两个关键故障,对应不同代码错误:

  1. 原代码无结果输出:请求参数获取方式错误+SQL逻辑错误+未提取查询结果
  2. 修改后触发sqlite3.ProgrammingError:SQL参数绑定写法错误

修正后的完整代码

后端app.py代码

@app.route('/search', methods=['GET', 'POST'])
def search():
    # 兼容GET/POST请求,正确获取搜索参数
    result = request.args.get('search') or request.form.get('search')
    
    conn = get_db_connection()
    if not result:
        # 处理空搜索场景,返回全部数据
        searchsmartphones = conn.execute("SELECT * FROM Smartphone").fetchall()
    else:
        # 模糊搜索的正确参数绑定写法
        searchsmartphones = conn.execute(
            "SELECT * FROM Smartphone WHERE brand LIKE ? OR model LIKE ?",
            ('%' + result + '%', '%' + result + '%')
        ).fetchall()
    
    conn.close()  # 关闭数据库连接,避免资源泄漏
    return render_template('smartphone.html', searchsmartphones=searchsmartphones)

表单与模板代码

表单和模板代码无需修改,保持原内容即可。

错误细节解释

  1. 参数获取错误:
    表单用GET方法提交,参数存在URL的查询串中,原代码用request.form.get无法获取参数,需改用request.args.get,同时兼容POST请求提升灵活性。

  2. SQL逻辑与绑定错误:

    • 原语句WHERE brand OR model = ?逻辑不成立,正确逻辑应为brand = ? OR model = ?;
    • 修改后的LIKE '%?%'写法错误:SQLite的参数占位符?不能放在字符串引号内,否则会被识别为普通字符而非占位符,需将通配符%与搜索关键词拼接后传入。
  3. 未提取查询结果:
    conn.execute()返回的是游标对象,必须调用fetchall()将结果转为可遍历的列表,否则模板无法渲染数据。

  4. 不必要的事务操作:
    SELECT查询无需执行conn.commit(),只有INSERT/UPDATE/DELETE等写操作才需要提交事务,操作完成后需关闭数据库连接。

内容的提问来源于stack exchange,提问作者Fallen Hamster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:19