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

Python操作MySQL更新表时'str' object is not callable错误如何解决

报错原因
  • 直接触发原因:conn.execute 方法的传参语法错误。你在SQL字符串和参数元组之间遗漏了逗号,写成了"UPDATE xxx"(参数1,参数2)的形式,Python会尝试把前面的SQL字符串当做可调用函数执行,因此触发'str' object is not callable的语法警告。
  • 隐藏问题:
    1. databases.commit、databases.close 都是数据库连接对象的方法,你没有加括号,这两行不会实际执行提交、关闭连接的操作,更新的数据不会真正写入数据库,也会造成连接资源残留。
    2. UPDATE语句未加WHERE过滤条件,执行后会覆盖整张表所有行的对应字段,造成全表数据损坏。
修复步骤
  1. 先修改回填函数,把表的主键(比如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])
  1. 修正更新函数的语法,补充逗号、方法调用括号和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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:18:05