今天写的一个小功能,里面要用MySQLdb更新数据库,语句如下

sql = "update %s.account_operation set status=1 where username='%s'" % (allResDBInfos['db'], username)

变量替换后,是下面的样子

update suspects.account_operation set status=1 where username='test@163.com'

语句没问题,数据库中也存在username为'test@163.com'的记录,并且手动执行也是正确的(status被正确的更新为1)

但奇怪的就是在Python中用MySQLdb更新的时候没有效果

原因就是suspects.account_operation这张表用的InnoDB引擎,InnoDB是事务性引擎,有个autocommit的变量控制是否自动提交事务。InnoDB默认的autocommit=1,也就是说,每条语句都是一个事务,都会被自动提交。但如果设置autocommit=0,关闭自动提交的话,就需要我们手动commit了。commit之前的所有更新都在一个事务内,如果不commit的话,这些更新都不会生效。

用MySQL的客户端连接时,autocommit=1,是会自动提交的。有意思的是,MySQLdb这个库默认autocommit=0,所以需要手动提交。

下面是MySQLdb的关于autocommit的说明,从1.2.0版本开始,默认禁用autocommit。

My data disappeared! (or won't go away!)

Starting with 1.2.0, MySQLdb disables autocommit by default, as required by the DB-API standard (PEP-249). If you are using InnoDB tables or some other type of transactional table type, you'll need to do connection.commit() before closing the connection, or else none of your changes will be written to the database.

Conversely, you can also use connection.rollback() to throw away any changes you've made since the last commit.

Important note: Some SQL statements -- specifically DDL statements like CREATE TABLE -- are non-transactional, so they can't be rolled back, and they cause pending transactions to commit.

上面这些内容都是针对InnoDB的,对于MyISAM这样的非事务性引擎,不存在事务概念,只管更新即可,autocommit是0或1都没有影响。

python mysql autocommit_MySQLdb autocommit的坑相关推荐

  1. 【整理】MySQL 之 autocommit

    2019独角兽企业重金招聘Python工程师标准>>> mysql 默认是开启 auto commit 的.可以通过如下命令查看 session 级别和 global 级别的设置: ...

  2. python mysql工具类_Python工具类(一)—— 操作Mysql数据库

    如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...

  3. Python MySQL 数据库

    python DB API python访问数据库的统一接口规范,完成不同数据库的访问 包含的内容: connection cursor exceptions 访问数据库流程: 1.创建connect ...

  4. storm mysql spout_storm kafkaSpout 踩坑问题记录! offset问题!

    整合kafka和storm例子网上很多,自行查找 问题描述: kafka是之前早就搭建好的,新建的storm集群要消费kafka的主题,由于kafka中已经记录了很多消息,storm消费时从最开始消费 ...

  5. 【踩坑记录】记一次MySQL主从复制延迟的坑

    最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...

  6. python mysql 驱动安装

    为什么80%的码农都做不了架构师?>>>    安装组件: python 3.4 + django 1.7 + mysql connector driver 系统平台: window ...

  7. python mysql 转义方法

    最近用python做项目的时候用到了mysql,把用python抓取的一些是数据放到mysql里去,但是有个问题,因为从外面抓取的数据有带'等其他的不规则的数据,如果你直接调用插入数据的方法会提示报错 ...

  8. 轻量应用服务器MySQL远程连接踩坑

    不算是给阿里云打广告吧,因为被阿里云的"云服务器ECS" 和 "轻量应用服务器"搞的很蛋疼.很多年前,阿里云的学生机"云翼计划"默认就只有& ...

  9. mysql autocommit_【整理】MySQL 之 autocommit

    mysql 默认是开启 auto commit 的.可以通过如下命令查看 session 级别和 global 级别的设置: mysql> select @@session.autocommit ...

最新文章

  1. Redis的Zset操作
  2. 三十岁前不必在乎的三十件事
  3. .attr()与.removeAttr()
  4. Java线程的不同状态
  5. mysql安装完只有黑框_MySQLMySQL的安装及安装中存在的问题
  6. win7资源管理器从计算机开始,熟练用Win7电脑从Win7资源管理器入门
  7. python横向输出字符串_Python字符串拼接和格式化输出
  8. AD18生成gerber文件IPC网表文件及坐标文件以及用CAM350读取gerber详细教程-免费版无积分
  9. ggplot2默认字体修改
  10. 2022.9.19-9.25 AI行业周刊(第116期):告别
  11. 网站渗透零基础教程 渗透测试工程师养成之路
  12. android 换机 备份,Recovery(Android手机备份功能)
  13. Excel统一将小写的金额转为大写汉字金额的操作
  14. contos7 配置 python3环境 支持微信公众号开发
  15. declare 简单用法
  16. 关于浏览器的深入解析都在这31张图里!
  17. go 及GoLand 环境安装
  18. 【计算机网络】期末课程设计 ENSP组网综合实验(附工程文件)
  19. 源码通透-mybatis源码分析以及整合spring过程
  20. SecureCRT的一些设置

热门文章

  1. 手把手带你玩转Tensorflow 物体检测 API (1)——运行实例
  2. JQuery Datatables 实现对某一列的数据合计汇总
  3. 华为数据通信产品VRP操作系统的使用
  4. centos离线部署gitlab
  5. mfc 子窗体 按钮不触发_VBA与Excel入门——用户窗体1
  6. Win11系统获取管理员权限的方法
  7. 火狐浏览器如何设置启动页面
  8. 关于jquery find 获取不到 input标签问题
  9. android 日程安排view,RecyclerView 列表控件中简单实现时间线
  10. 迈普路由器访问控制列表配置命令_如何选购企业路由器?选购企业路由器需注意什么...