浅析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 相关文章推荐
python求斐波那契数列示例分享
Feb 14 Python
Python中的localtime()方法使用详解
May 22 Python
Python实现k-means算法
Feb 23 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
python基于http下载视频或音频
Jun 20 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
django日志默认打印request请求信息的方法示例
May 17 Python
python中操作文件的模块的方法总结
Feb 04 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通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
Python splitlines使用技巧
2008/09/06 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
python3 深浅copy对比详解
2019/08/12 Python
Python @property装饰器原理解析
2020/01/22 Python
Python正则表达式如何匹配中文
2020/05/27 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
工作人员思想汇报
2014/01/09 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
元旦活动感言
2014/03/08 职场文书
小学优秀学生评语
2014/12/29 职场文书