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

Python中如何在IF语句外部访问其内部定义的变量

问题根因

  • 你的POST请求分支中,给searchData赋值后立刻调用了return jsonify(searchData),请求直接返回,不会执行后续的数据库查询代码,所以你会感觉POST分支没有修改searchData的值。
  • GET请求不会进入if request.method == "POST"的分支,所以如果不在分支外提前声明searchData,GET请求走到SQL执行步骤时就会抛出变量未定义的错误;如果提前声明了初始值,GET请求使用的就是这个初始值,和POST提交的内容没有关联。

解决思路

首先明确接口的业务逻辑,以下是两种常见场景的修复方案:

场景1:仅接收POST请求提交搜索关键词,返回匹配的公司列表

直接将数据库查询逻辑移入POST分支,删除多余的返回语句,示例代码如下:

@app.route('/ML', methods=['POST'])
def index():
    if request.method == "POST":
        request_data = json.loads(request.data)
        searchData = request_data['content']
        # 把数据库查询逻辑移到POST分支内
        mycursor = mydb.cursor(dictionary=True)
        query = "SELECT * FROM COMPANY WHERE COMPANY_NAME LIKE %s LIMIT 20;"
        mycursor.execute(query,("%" + searchData + "%",))
        myresult = mycursor.fetchall()

        company = []
        for result in myresult:
            content ={'COMPANY_NAME':result['COMPANY_NAME'],}
            company.append(content)
        return jsonify(company)

场景2:同时支持GET、POST两种请求,POST提交关键词返回结果,GET请求支持传参或者返回默认结果

可以在分支外声明searchData的默认值,同时根据请求方法给变量赋值,示例代码如下:

@app.route('/ML', methods=['GET', 'POST'])
def index():
    searchData = "" # 给默认值,比如空字符串匹配所有或者自定义默认搜索词
    if request.method == "POST":
        request_data = json.loads(request.data)
        searchData = request_data['content']
    elif request.method == "GET":
        # 可选:支持GET请求从查询参数取搜索词,比如 /ML?keyword=xxx
        searchData = request.args.get("keyword", "")
    
    mycursor = mydb.cursor(dictionary=True)
    query = "SELECT * FROM COMPANY WHERE COMPANY_NAME LIKE %s LIMIT 20;"
    mycursor.execute(query,("%" + searchData + "%",))
    myresult = mycursor.fetchall()

    company = []
    for result in myresult:
        content ={'COMPANY_NAME':result['COMPANY_NAME'],}
        company.append(content)
    return jsonify(company)

额外优化建议

  • 可以对请求入参的searchData做非空、长度校验,避免无效查询。
  • 数据库操作完成后记得关闭游标和连接,避免连接泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:03