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

SQLite参数化查询无法匹配HTML下拉选项值问题求助

SQLite参数化查询无法匹配下拉框值的问题解决

问题现象

HTML下拉选择框提交'Ready'或'Exported'值后,用参数化查询WHERE knit_status = ?无法筛选出对应数据,但直接将条件写死为WHERE knit_status = 'Ready'时可以正常生效。

原代码中的错误点

  1. SQLAlchemy原生SQL执行方式错误:db.session.query()是ORM查询方法,不能直接传入原生SQL字符串,执行原生SQL需用db.session.execute()。
  2. SQL语句语法错误:原SQL字符串末尾缺少闭合引号和右括号,导致语句无法正常解析。
  3. 未获取查询结果:执行SQL后没有提取结果集,模板接收的只是执行对象而非实际数据。
  4. HTML表单标签未闭合:<form>标签缺少闭合的>,可能影响表单提交逻辑。

修正后的代码

HTML代码

<html>
    <body>
        <form action="/knitreports" method='POST'>
            <select name="rep_knit_status">
                <option value="Null">Status.. </option>
                <option value="Ready">Ready</option>
                <option value="Exported">Exported</option>
            </select>
            <button type="submit" class="btn btn-info" target="_blank">Report</button>
        </form>
    </body>
</html>

Flask后端代码

@app.route('/knitreports', methods=['GET', 'POST'])
def knitreports():
    knitreports = []
    if request.method == 'POST':
        rep_knit_status = request.form.get('rep_knit_status')
        # 正确编写原生SQL语句并闭合字符串
        sql = "SELECT knit_status,knit_boxnr,knit_ord_no,knit_style_no,knit_st,knit_var_No,knit_XS,knit_S,knit_M,knit_L,knit_XL,knit_XXL FROM knitting WHERE knit_status = ?"
        # 执行参数化查询,参数通过元组传入
        result = db.session.execute(sql, (rep_knit_status,))
        # 获取所有查询结果
        knitreports = result.fetchall()
    return render_template('knitreport.html', knitreports=knitreports)

关键说明

  • 使用db.session.execute()执行原生SQL,参数通过元组传入实现参数化查询,同时避免SQL注入风险。
  • 调用fetchall()提取查询结果集,确保模板能拿到可渲染的数据。
  • 初始化knitreports为空列表,避免GET请求时因变量未定义导致的模板错误。
  • 修复HTML表单标签的闭合问题,保证表单提交逻辑正常。

内容的提问来源于stack exchange,提问作者Mevlut Ademay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:10:14