如下面的代码示例:
import pymysql
conn = pymysql.connect(host='localhost',
user='root',
password='xxxx',
database='xxxx',
autocommit=False,
cursorclass=pymysql.cursors.DictCursor)
with conn.cursor() as cr:
cr.execute("insert into word_count values('name',100)")
代码执行完毕,发下代码自动提交到数据库了,按照正常情况,数据库应该不会有数据才是正确的。
解决方案如下:
# 1. 执行sql 查询创建表的引擎是什么
show create table word_count;
mysql> show create table word_count;
+------------+------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+------------------------------------------------------------------------------------------------------------------------------+
| word_count | CREATE TABLE `word_count` (
`word` varchar(100) NOT NULL,
`cnt` int(11) DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+------------+------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
# ENGINE=MyISAM,说明我们当前用的存储引擎是MyISAM,而这个引擎不支持事务,所以是否设置自动提交都不生效。
创建表的时候,更改引擎为
ENGINE=InnoDB 就可以正常使用了。
CREATE TABLE `word_count` (
`word` varchar(100) NOT NULL,
`cnt` int(11) DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
总结下: MyISAM 不支持事务,所以autocommit 设置False不生效,更好mysql存储引擎即可
0