Python操作MySQL更新表时'str' object is not callable错误如何解决
报错原因
- 直接触发原因:
conn.execute方法的传参语法错误。你在SQL字符串和参数元组之间遗漏了逗号,写成了"UPDATE xxx"(参数1,参数2)的形式,Python会尝试把前面的SQL字符串当做可调用函数执行,因此触发'str' object is not callable的语法警告。 - 隐藏问题:
databases.commit、databases.close都是数据库连接对象的方法,你没有加括号,这两行不会实际执行提交、关闭连接的操作,更新的数据不会真正写入数据库,也会造成连接资源残留。- UPDATE语句未加WHERE过滤条件,执行后会覆盖整张表所有行的对应字段,造成全表数据损坏。
修复步骤
- 先修改回填函数,把表的主键(比如id字段,可根据实际表结构调整对应列索引)也存起来,用于更新时定位单条数据:
def showtable(tree): viewinfo = tree.focus() data = tree.item(viewinfo) row = data['values'] global record_id # 也可根据你的代码结构用其他方式存储主键 record_id = row[3] # 替换为你树表中主键所在的实际列索引 t4.set(row[0]) t5.set(row[1]) t6.set(row[2])
- 修正更新函数的语法,补充逗号、方法调用括号和WHERE条件:
def update(): databases = mysql.connector.connect( host = "localhost", user = "userdata", password = "", database = "facerecog" ) conn = databases.cursor() # 用逗号分隔SQL语句和参数元组,加WHERE条件定位单条数据 conn.execute( "UPDATE record set names=%s, course_year=%s, position=%s WHERE id=%s", (t4.get(), t5.get(), t6.get(), record_id) ) databases.commit() # 加括号执行提交方法 databases.close() # 加括号执行关闭连接方法 messagebox.showinfo("NOTICE", "UPDATED SUCCESSFULLY")
内容的提问来源于stack exchange,提问作者ewan_wabalo
相关产品推荐
相关产品推荐

