Python向MySQL插入随机测试记录无报错,但查询返回空集
问题根因定位
mysql-connector-python驱动默认关闭自动提交(autocommit),所有通过游标执行的INSERT这类DML(数据操纵语言)操作,都会被纳入未提交的数据库事务上下文,修改不会直接持久化到表中。- 你的代码执行完全部插入逻辑后,没有主动调用事务提交接口;当程序运行结束、数据库连接被回收时,未提交的事务会被MySQL自动回滚,所有插入的修改全部作废。
- 整个流程没有触发语法、权限、数据格式类的错误,程序和驱动都不会抛出异常,因此出现“全程无报错、查询返回空集”的现象。
- 代码中的
CREATE TABLE属于DDL(数据定义语言)语句,MySQL对DDL操作会执行隐式事务提交,因此products表可以正常创建,这也是为什么查询时不会报“表不存在”,只会返回空结果。
可行修复方案
- 手动提交事务:在所有插入逻辑执行完成后,调用连接对象的提交方法:
db_connection.commit(),确保所有插入的修改持久化到磁盘。 - 开启自动提交:在初始化数据库连接时,给
mysql.connector.connect()方法增加入参autocommit=True,后续所有DML操作执行后会自动完成提交,无需手动调用接口。 - 资源释放:程序执行完毕后主动调用
db_cursor.close()、db_connection.close()释放数据库资源,避免连接泄漏。
内容的提问来源于stack exchange,提问作者MaybeYesMaybeNo
相关产品推荐
相关产品推荐

