Python对MySQL进行update之后必须要commit,数据库的数据操作才会真正生效

在使用Python的pymysql模块进行数据库insert操作时,尽管代码显示操作成功,但数据库中并未出现新数据。问题源于MySQL InnoDB引擎的事务特性,需通过commit提交或设置自动提交来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天上午在尝试使用Python中的pymysql模块来进行数据库的insert操作,但每次代码返回已经更新成功,可数据库中就是没有出现相应的数据,一直没有找到错误的原因,很郁闷。后来在网上到处搜索,总算有了一点头绪,在此记录下来。

首先贴上我的代码:

import pymysql

conn = pymysql.connect(host="*.*.*.*",port=***,user="***",passwd="***",db="***")
sql = "insert into dangdang(title,link,comment) values('aaa','bbb','ccc')"
res = conn.query(sql)
print(res)

执行过上述代码以后,程序输出1,说明插入操作已经成功,可是我在数据库里查看,却发现根本没有我想要插入的这行数据,经过一番google,我发现原因如下:

上述问题与MySQL的存储引擎对事务的支持有关,MySQL中有多种类型的存储引擎, 例如: MyISAM, InnoDB等。 MyISAM不支持事务处理, 而InnoDB是事务型数据库, 支持事务。  我的MySQL的默认存储引擎就是InnoDB, 所以对数据库数据的操作会在事先分配的缓存中进行, 只有在commit之后, 数据库的数据才会改变。而python 操作mysql 是用事务的方式来实现的,所以在update的时候必须有commit 提交的过程,否则数据表不会生效(但之前用C或JAVA执行数据库update操作时却不用commit,Python必须要,至于具体原因有懂得的大神麻烦给我解释一下)

解决办法:

方法一:每次操作后必须提交事务(commit),否则操作无效,更改后的代码如下:

import pymysql

conn = pymysql.connect(host="****",port=****,user="****",passwd="****",db="****")
sql = "insert into dangdang(title,link,comment) values('aaa','bbb','ccc')"
res = conn.query(sql)
#对操作进行提交
conn.commit()  
print(res)

方法二:数据库连接建立之后,设置自动提交,即如:conn.autocommit(1) ,更改后的代码如下:

import pymysql

conn = pymysql.connect(host="****",port=****,user="****",passwd="****",db="****")
#设置自动提交
conn.autocommit(1)
sql = "insert into dangdang(title,link,comment) values('aaa','bbb','ccc')"
res = conn.query(sql)
conn.commit
print(res)

使用以上任一方法,再去执行update操作,即可成功。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值