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

Python+Tkinter+MySQL查询报ValueError解包错误及SQL条件匹配问题求解

问题原因及解决方案

核心问题原因

  • SQL字段引用语法错误:查询语句中用单引号包裹date、patient_id字段名,单引号在SQL中用于标识字符串常量,这会导致SQL实际执行的是判断字符串'date'是否等于传入的日期值,永远返回假,因此查询结果为空。
  • 日期格式不匹配:数据库date字段存储格式为YYYY-MM-DD,但tkcalendar返回的日期格式为DD/MM/YYYY,两种格式的字符串无法匹配,导致条件不成立。
  • MySQL Workbench测试语句错误:直接写date = 13/11/2021时,MySQL会将13/11/2021识别为除法运算,计算得到的小数值和date字段完全不匹配,因此返回0行;替换为OR后返回数据是因为仅patient_id条件生效,本质是只按患者ID查询,并非两个条件都匹配成功。

修复方案

1. 转换日期格式

引入datetime模块,将tkcalendar返回的DD/MM/YYYY格式日期转换为和数据库一致的YYYY-MM-DD格式:

from datetime import datetime

# 原有获取日期逻辑后新增格式转换
start = get_date2()
start_date = datetime.strptime(start, "%d/%m/%Y").strftime("%Y-%m-%d")

2. 修正SQL查询语句

字段名不要用单引号包裹,如需转义请使用反引号`:

# 修正后的查询语句
query = "SELECT voltage, time FROM patient_results_tbl WHERE `date` = %s AND `patient_id` = %s"
mycursor.execute(query, (start_date, pat_id))

3. 新增空结果校验

查询后先判断结果是否为空,避免解包报错:

result = mycursor.fetchall()
# 新增空结果判断
if not result:
    print("未查询到对应患者的指定日期数据")
    # 可在此处添加Tkinter弹窗提示逻辑
    return
# 原有解包逻辑
voltage, time = list(zip(*result))

测试验证

在MySQL Workbench中执行正确的测试语句可验证匹配逻辑:

SELECT voltage, time FROM patient_results_tbl WHERE `date` = '2021-11-13' AND `patient_id` = '785393661';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:02