python

pymsql 设置 autocommit=False 不生效问题

文 / sptk 来源 / 原创 阅读 / 230 10月前

如下面的代码示例:

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

站点声明:站点主要用于个人技术文章。

冀ICP备19037883号
相关侵权、举报、投诉及建议等,请发E-mail:804330969@qq.com