浅析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 string类型 bytes类型 bytearray类型
Dec 16 Python
python正则实现提取电话功能
Feb 24 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
python读取文件名并改名字的实例
Jan 07 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python动态导入模块和反射机制详解
Feb 18 Python
Python处理mysql特殊字符的问题
Mar 02 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
python 实现定时任务的四种方式
Apr 01 Python
Python使用永中文档转换服务
May 06 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生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
用JQUERY增删元素的代码
2012/02/14 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
Python中new方法的详解
2019/01/15 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
python字符串格式化方式解析
2019/10/19 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
军训 自我鉴定
2014/02/03 职场文书
保险专业自荐信范文
2014/02/20 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
2015大学生实训报告
2014/11/05 职场文书
共青团员自我评价
2015/03/10 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
趣味运动会通讯稿
2015/07/18 职场文书