You need to enable JavaScript to run this app. Flask使用MySQL执行多OR LIKE条件搜索查询报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Flask使用MySQL执行多OR LIKE条件搜索查询报错如何解决

问题根因

你写的SQL语句里有2个{}字符串占位符,但调用str.format()方法时只传入了1个searchbox参数,参数数量和占位符数量不匹配,Python会直接抛出索引越界异常,导致接口报错,前端自然收到错误响应。
你手动替换占位符时是给两个LIKE条件都填了相同的值,所以在DBeaver里执行不会出错。

修复方案

首先不要用字符串拼接的方式构造SQL语句,这种写法存在严重的SQL注入风险,应该用MySQL驱动自带的参数化查询能力,同时解决占位符数量不匹配的问题:

修复后的Flask后端代码

from flask import render_template, request, redirect, url_for, session, flash, jsonify
@terapia.route('/livesearch', methods=["POST","GET"])
def livesearch():
    searchbox = request.form.get('text', '')
    cur = mysql.connection.cursor()
    # 用%s做参数占位符,参数通过execute的第二个参数传入
    query = """
    SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion 
    FROM terapia 
    LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta 
    LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente 
    LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad 
    WHERE especialidad.descripcion LIKE %s OR terapeuta.nombre LIKE %s
    """
    # 两个占位符对应两个参数,通配符%直接放在参数值里
    params = (f"{searchbox}%", f"{searchbox}%")
    try:
        cur.execute(query, params)
        result = cur.fetchall()
    except Exception as e:
        # 可自行添加日志记录错误
        result = []
    finally:
        # 关闭游标避免连接泄漏
        cur.close()
    return jsonify(result)

前端可选优化

添加错误回调方便后续排查问题:

<div class="col-md-12">
    <input type="text" id="livebox">
    <p id="search-response"></p>
</div>
<script>
    $(document).ready(function(){
        $("#livebox").on("input", function(e){
            let textinlivebox = $("#livebox").val();
            $.ajax({
                method: "POST",
                url: "/terapia/livesearch",
                data:{text: textinlivebox},
                success: function(res){
                    console.log(res)
                },
                error: function(xhr, err){
                    console.log("请求异常", err)
                }
            })
        });
    });
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:24:03