浅析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中实现两个字典(dict)合并的方法
Sep 23 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
python tornado微信开发入门代码
Aug 24 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python3下载抖音视频的完整代码
Jun 05 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
django的autoreload机制实现
Jun 03 Python
基于python实现图片转字符画代码实例
Sep 04 Python
python 爬取B站原视频的实例代码
Sep 09 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python装饰器使用方法实例
2013/11/21 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python 实现简单的电话本功能
2015/08/09 Python
python使用tornado实现登录和登出
2018/07/28 Python
python实现决策树分类(2)
2018/08/30 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
python如何获取apk的packagename和activity
2020/01/10 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
数控专业自荐书范文
2014/03/16 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android