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

树莓派下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("请输入有效的数值!")

额外的小问题提示

  1. 你的InputPage里引用了OutputPage但没有定义这个类,运行时会报错,记得补充这个类的定义,或者暂时注释掉相关菜单命令先测试插入功能。
  2. __init__里的页面循环:
    for F in (InputPage):
    
    如果后面还有PageOne、OutputPage等页面,要改成标准元组格式:
    for F in (InputPage, PageOne, OutputPage):
    

现在你再测试输入34.56,应该就能成功插入数据库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:45