PySimpleGUI+Access数据库更新报错:Too few parameters. Expected 2
问题原因
你的代码混合了参数化查询与字符串拼接两种SQL参数传递方式,第二次执行时,通过字符串拼接的id值可能出现异常(比如索引越界导致返回无效值、或值不是合法数字),Access会将这个异常值识别为新的参数占位符,使得SQL语句期望接收2个参数,但你仅传入了willchange这1个参数,从而触发"参数不足"错误。
解决方案
1. 统一使用参数化查询(推荐)
将id也作为参数传递,彻底避免字符串拼接带来的问题,同时防止SQL注入风险:
if event == '-listbox-' and set == True: target_id = questions[values[event][0]] cursor.execute('UPDATE Questions SET Question_field = ? WHERE id = ?', (willchange, target_id))
2. 增加索引有效性检查
避免因列表索引越界导致的无效id值:
if event == '-listbox-' and set == True: selected_idx = values[event][0] # 检查索引是否在questions列表的有效范围内 if 0 <= selected_idx < len(questions): target_id = questions[selected_idx] cursor.execute('UPDATE Questions SET Question_field = ? WHERE id = ?', (willchange, target_id)) else: # 处理索引无效的情况,比如弹出提示或日志记录 print("无效选择,请重新操作")
内容的提问来源于stack exchange,提问作者Rauf İlyai
相关产品推荐
相关产品推荐

