浅析Python中MySQLdb的事务处理功能


Posted in Python onSeptember 21, 2016

前言

任何应用都离不开数据,所以在学习python的时候,当然也要学习一个如何用python操作数据库了。MySQLdb就是python对mysql数据库操作的模块。今天写了个工具,目的是把csv中的数据插入到数据库中去。其中有一部分,是需要分别向两张表中插入两条数据,如果第二张表中的数据已经存在,那么第一张表中的数据也不需要插入。

然后通过百度查找发现,其实MySQLdb库,自带了事务处理的功能,pymysql库也是一样。

conn = MySQLdb.connect()返回一个连接对象

cursor = conn.cursor()返回一个游标对象

当我们使用cursor.execute(SQL)执行一条Insert/Update/Delete语句后,我们需要使用conn.commit()提交事务,否则,语句不会生效。

其实我们常用的commit() ,就是包含了一种事务处理的概念,如果你在commit()之前,执行了多条语句,只有当commit()之后,才会全部生效。

那么如果像文章开始提到的那样,执行两条插入语句,我们可以把conn.commit()语句放在两条插入语句执行之后,并放在try语句块内,如果差生异常,我们可以使用:

conn.rollback()

这个语句可以使事务回滚,直到上一条conn.commit()执行之后的位置。

所以,我的代码是这样写的,这里我就简单的写了,并没有用类来封装了:

try:
cursor = conn.cursor()
cursor.execute(insertSQL1)
cursor.execute(insertSQL2)
cursor.close()
conn.commit()
except Exception, e:
cursor.close()
conn.rollback()

总结

这就可以达到我们的目的了。其实更优雅的方法是,对事务处理进行一个封装,将处理过程写在自己的类的方法中,并接受1个SQL语句序列(可能包含1条或多条SQL语句)作为参数,返回事务执行状态即可。以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。

Python 相关文章推荐
打开电脑上的QQ的python代码
Feb 10 Python
urllib2自定义opener详解
Feb 07 Python
python通过scapy获取局域网所有主机mac地址示例
May 04 Python
Python输出各行命令详解
Feb 01 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
如何使用Python实现自动化水军评论
Jun 26 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 #Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 #Python
Python 爬虫学习笔记之正则表达式
Sep 21 #Python
Python简单实现安全开关文件的两种方式
Sep 19 #Python
Python打包可执行文件的方法详解
Sep 19 #Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 #Python
利用Python画ROC曲线和AUC值计算
Sep 19 #Python
You might like
php Smarty模板生成html文档的方法
2010/04/12 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
Python中方法链的使用方法
2016/02/23 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
十八大闭幕感言
2014/01/22 职场文书
装修设计师求职信
2014/02/26 职场文书
电视购物广告词
2014/03/19 职场文书
班级口号大全
2014/06/09 职场文书
高三毕业评语
2014/12/31 职场文书
爱国主义影片观后感
2015/06/18 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
关于MySQL中explain工具的使用
2023/05/08 MySQL