树莓派下Python面向对象操作MySQL插入失败排查求助
解决MySQL INSERT语句执行失败的问题
看起来你在树莓派上用Python面向对象结合tkinter做数据库插入时遇到了问题,我帮你找出了几个关键错误,咱们一步步来修复:
1. 数据库游标引用错误
在input_submit方法里,你直接用了c.execute(),但这个c是你在__init__里初始化的实例属性self.c,不是全局变量。程序找不到这个未定义的全局c,会直接触发异常,所以要改成self.c.execute()。
2. 参数元组格式错误
MySQLdb执行带参数的SQL时,参数必须是元组格式。你写的(in_val)其实只是普通括号包裹的变量,不是元组——单个元素的元组需要在末尾加逗号,也就是(in_val,)。如果不加逗号,MySQLdb会把它当成单个值去匹配%s,导致参数格式不匹配的错误。
3. 笼统的异常处理(可选但强烈推荐)
你当前的except块只打印"Except",完全不知道具体是什么错误。建议捕获MySQLdb.Error并打印错误详情,这样调试起来能精准定位问题。
修正后的关键代码部分
修复input_submit方法
def input_submit(self, input_value): try: in_val = float(input_value) self.sql = "INSERT INTO input_delay_master (input_delay) VALUES (%s)" # 修正游标引用 + 修正参数元组格式 self.c.execute(self.sql, (in_val,)) self.db.commit() print("数据插入成功!") except MySQLdb.Error as e: # 打印具体错误信息,方便调试 print(f"插入失败,错误详情:{e}") self.db.rollback() except ValueError: # 额外处理输入不是有效浮点数的情况 print("请输入有效的数值!")
额外的小问题提示
- 你的
InputPage里引用了OutputPage但没有定义这个类,运行时会报错,记得补充这个类的定义,或者暂时注释掉相关菜单命令先测试插入功能。 __init__里的页面循环:
如果后面还有for F in (InputPage):PageOne、OutputPage等页面,要改成标准元组格式:for F in (InputPage, PageOne, OutputPage):
现在你再测试输入34.56,应该就能成功插入数据库了。
内容的提问来源于stack exchange,提问作者Vrajesh Doshi
相关产品推荐
相关产品推荐

