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
相关产品推荐
相关产品推荐

