SQLite参数化查询无法匹配HTML下拉选项值问题求助
SQLite参数化查询无法匹配下拉框值的问题解决
问题现象
HTML下拉选择框提交'Ready'或'Exported'值后,用参数化查询WHERE knit_status = ?无法筛选出对应数据,但直接将条件写死为WHERE knit_status = 'Ready'时可以正常生效。
原代码中的错误点
- SQLAlchemy原生SQL执行方式错误:
db.session.query()是ORM查询方法,不能直接传入原生SQL字符串,执行原生SQL需用db.session.execute()。 - SQL语句语法错误:原SQL字符串末尾缺少闭合引号和右括号,导致语句无法正常解析。
- 未获取查询结果:执行SQL后没有提取结果集,模板接收的只是执行对象而非实际数据。
- 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
相关产品推荐
相关产品推荐

