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

Python无法向数据库表插入数据问题求助

解决Python操作MySQL无法插入数据的问题

这问题我之前排查过好几个类似的,根源其实很简单——你没提交事务!

问题分析

MySQL(还有很多其他关系型数据库)默认开启事务机制,而Python的MySQL驱动(比如pymysql、mysql-connector-python)默认不会自动提交事务。你的execute函数执行完插入SQL后直接断开连接,此时未提交的事务会被自动回滚,所以数据根本没真正写入数据库。

至于你在Adminer里手动执行插入语句能成功,是因为这类数据库管理工具默认会在执行语句后自动帮你提交事务,所以操作能直接生效。

修复方案

修改你的dbhandler.py里的execute函数,在执行SQL后添加事务提交操作,同时加上异常处理和回滚逻辑,避免出错时出现数据不一致:

def execute(self, sql):
    self.connection()
    try:
        self.cur.execute(sql)
        # 关键步骤:提交事务
        self.conn.commit()
        print(sql)
    except Exception as e:
        # 出错时回滚事务,避免脏数据残留
        self.conn.rollback()
        # 抛出异常让调用方知晓错误
        raise e
    finally:
        # 无论成功失败都确保断开连接
        self.disconnect()

如果你的代码里包含查询操作(不需要提交事务),可以给函数加个可选参数来灵活控制是否提交:

def execute(self, sql, commit=True):
    self.connection()
    try:
        self.cur.execute(sql)
        print(sql)
        if commit:
            self.conn.commit()
    except Exception as e:
        self.conn.rollback()
        raise e
    finally:
        self.disconnect()

调用查询语句时就可以这样写:

mysqldb.execute("SELECT * FROM DATA;", commit=False)

验证修复

修改代码后重新执行插入语句,再打开Adminer查看DATA表,你应该就能看到插入的(1,2)数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:57:36