浅析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 相关文章推荐
在Linux下调试Python代码的各种方法
Apr 17 Python
浅谈django中的认证与登录
Oct 31 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python绘制条形图方法代码详解
Dec 19 Python
Python设计模式之代理模式简单示例
Jan 09 Python
Pandas标记删除重复记录的方法
Apr 08 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
OpenCV 模板匹配
Jul 10 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
Python实现给PDF添加水印的方法
Jan 25 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数据缓存技术
2007/02/14 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
不假外出检讨书
2014/01/27 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
幼儿园家长寄语
2014/04/02 职场文书
C++程序员求职信
2014/05/07 职场文书
庆祝儿童节标语
2014/10/09 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python