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

使用mysql.connector的Python代码无法修改数据库求助

数据库未实际修改问题排查

核心问题分析

你的代码控制台输出正常但数据库无变更,硬编码可正常运行,主要是以下两个原因导致:

1. 事务未提交

Python多数数据库驱动(如MySQLdb、psycopg2)默认手动提交事务,代码中执行完SQL语句后没有显式提交,所有操作都停留在事务缓冲区,并未写入数据库。硬编码测试时可能你之前触发过提交逻辑,或者环境默认自动提交,但当前代码缺失该关键步骤。

解决办法:在所有SQL执行完成后(调用refresh_tables()之前)添加事务提交语句:

conn.commit()

2. 文件路径存在换行符匹配问题

从执行输出可见,当exceptions=1时,获取到的filepath带有换行符:('C:/Users/train/7.xls\n',),但数据库中tableoffiles表的DataLocation字段值大概率没有这个换行符,导致WHERE条件匹配不到任何行,SQL执行后无实际修改。

解决办法:对获取到的路径做首尾空白字符(含换行符)清理:

filepath = (contents['values'][1].strip(),)

3. 资源泄漏优化(可选)

代码中获取数据库连接和游标后未关闭,可能导致连接耗尽或事务异常,建议在操作完成后关闭资源:

cursor.close()
conn.close()

修改后的关键代码片段

if exceptions == 1:
    print(filepath)
    cursor.execute(Ex_to_Z, filepath)
    print("setting exept to 0")
    cursor.execute(drop_f_ex, filepath)
    print("add to except")
    cursor.execute(add_to_sum, filepath)
    print("adding to sum")
    conn.commit()  # 新增事务提交
    cursor.close()
    conn.close()
    refresh_tables()
    print("refreshing tables")

elif exceptions == 0:
    print(filepath)
    cursor.execute(Ex_to_O, filepath)
    print("setting exept to 1")
    cursor.execute(add_f_ex, filepath)
    print("add to except")
    cursor.execute(drop_f_sum, filepath)
    print("removing from sum")
    conn.commit()  # 新增事务提交
    cursor.close()
    conn.close()
    refresh_tables()
    print("refreshing tables")

内容的提问来源于stack exchange,提问作者Michael S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:54