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

Tkinter库存管理插入MySQL报Python type method cannot be converted错误如何解决

错误原因

该报错是代码中两处逻辑错误导致方法对象而非实际业务值被传入MySQL驱动,具体问题如下:

  • getProdName方法定义错误:当前代码return self.getProdName返回的是方法本身的引用,并非存储产品名称的self.ProdName属性,取到的值是方法类型而非字符串。
  • Product类的属性定义位置错误:prodID = self.getProductID()、prodname = self.getProdName()两行写在类属性声明区域,不在实例方法内部,实例初始化时self还未生效,这两个变量无法拿到正确的实例属性值,直接传入SQL就会触发类型转换错误。
  • 代码缩进错误:你贴的addProduct方法下的所有代码没有正确缩进,不属于方法内部,实际运行会提前执行报错,也需要修正。
修复方案

直接修改Product类所在文件即可,GUI代码无逻辑错误不需要调整,修正后的完整代码如下:

## product file
import mysql.connector

class Product:
    def __init__(self):
        self.ProductID = ''
        self.ProdName = ''
    
    def getProductID(self):
        return self.ProductID
    def setProductID(self, value):
        self.ProductID = value

    # 修正getProdName返回值
    def getProdName(self):
        return self.ProdName
    def setProdName(self, value):
        self.ProdName = value

    def addProduct(self):
        # 修正缩进,所有数据库操作放在方法内部
        mydb = mysql.connector.connect(
            host='localhost',
            database='PHP',
            user='root',
            password=''
        )
        mycursor = mydb.cursor()
        sql1 = "INSERT INTO product (ProductID, ProdName) VALUES (%s,%s)"
        # 直接调用get方法取当前实例的最新值,不需要提前定义全局prodID/prodname
        val = (self.getProductID(), self.getProdName())
        mycursor.execute(sql1, val)
        mydb.commit()
        # 新增资源释放逻辑,避免连接泄漏
        mycursor.close()
        mydb.close()

修改后运行即可正常将数据写入MySQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:07