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

MySQL查询在Workbench有结果,但在Flask应用中返回空列表

排查Flask中MySQL查询返回空列表的问题

按以下步骤逐一排查:

1. 确认数据库连接环境一致

检查getCursor()返回的连接,是否和你在MySQL Workbench中使用的同一个数据库实例、同一个库。新手常出现代码连接测试库、Workbench连接生产库,或是本地/远程库混淆的情况。

可以在代码中添加查询当前数据库的语句验证:

connection.execute("SELECT DATABASE();")
print(connection.fetchone())

将输出结果和Workbench中的当前数据库对比,确认是否一致。

2. 硬编码参数测试,排除变量问题

把代码中的jobNo替换为硬编码的5,直接执行查询:

connection.execute(sql, (5,))
partList = connection.fetchall()
print(partList)

如果此时能返回结果,说明jobNo变量的实际值存在问题——比如看似是"5",但实际带有空格、换行符等隐藏字符。可以打印变量的类型和原始值确认:

print(type(jobNo), repr(jobNo))
# 正常输出应为 <class 'str'> '5' 或 <class 'int'> 5

若存在隐藏字符,可先用jobNo.strip()处理后再转换为int类型。

3. 检查事务配置

部分MySQL连接默认关闭自动提交(autocommit=False),虽然查询通常不受事务影响,但如果存在未提交的修改,可能导致查询无法获取最新数据。可以在执行查询前开启自动提交:

connection.autocommit(True)

也可以检查getCursor()函数的连接初始化代码,确认是否配置了autocommit。

4. 调试实际执行的SQL(仅用于排查)

如果使用PyMySQL,可手动拼接SQL(仅调试用,生产环境禁止字符串拼接SQL),对比和Workbench中执行的语句是否一致:

# 仅调试使用!生产环境必须用参数绑定
debug_sql = sql % (jobNo,)
print(debug_sql)
# 将此SQL复制到Workbench执行,查看是否返回结果

如果拼接后的SQL在Workbench中也返回空,说明变量值存在问题;若能返回结果,则可能是驱动的参数绑定逻辑异常,可尝试将%s替换为%d(仍推荐优先使用参数绑定)。

5. 检查表名/字段名的大小写(针对Linux服务器)

MySQL在Linux环境下默认区分表名大小写,Windows环境下不区分。若代码中写的是job_part,但实际数据库中的表名为Job_Part,在Linux环境下会查询不到数据(无报错,仅返回空列表)。可在Workbench中执行SHOW TABLES;确认表名的准确大小写。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:26:14