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

