Tkinter下拉框值用于MySQL查询时参数类型不匹配报错排查
问题定位与解决
错误原因
mysql.connector.errors.ProgrammingError提示参数必须为列表、元组或字典,核心问题是你直接把下拉框选中的单个值传入了execute()方法,而MySQL驱动要求参数必须是可迭代的容器类型(元组、列表或字典)。如果传单个字符串,驱动会把它当成字符序列逐个解析,导致参数格式不匹配。
解决方法
把下拉框获取的分类值包装成元组(必须加末尾的逗号,否则会被识别成单个值而非元组)或列表,再传入execute()。
错误代码示例(常见问题)
# 错误:直接传单个值 selected_category = category_combo.get() cursor.execute("SELECT id FROM categories WHERE name = %s", selected_category)
修正后的代码
# 正确:包装成元组(注意末尾的逗号) selected_category = category_combo.get() cursor.execute("SELECT id FROM categories WHERE name = %s", (selected_category,)) # 或者包装成列表 cursor.execute("SELECT id FROM categories WHERE name = %s", [selected_category])
额外注意点
- 如果使用命名参数(比如
%(category)s),则需要传入字典:cursor.execute("SELECT id FROM categories WHERE name = %(category)s", {"category": selected_category}) - 确保下拉框获取的值不为空,避免传入空值导致的其他SQL错误。
内容的提问来源于stack exchange,提问作者Bajusz
相关产品推荐
相关产品推荐

