浅析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 用户登录验证的小例子
Mar 06 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python堆排序原理与实现方法详解
May 11 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
如何在python中写hive脚本
Nov 08 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
如何解决.cuda()加载用时很长的问题
May 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实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
解析php中curl_multi的应用
2013/07/17 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
python__name__原理及用法详解
2019/11/02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python实现马丁策略的实例详解
2021/01/15 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
小学英语教学反思
2014/01/30 职场文书
《乡愁》教学反思
2014/02/18 职场文书
小学教学随笔感言
2014/02/26 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
webpack的移动端适配方案小结
2021/07/25 Javascript