浅析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 相关文章推荐
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
使用python实现个性化词云的方法
Jun 16 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
django Admin文档生成器使用详解
Jul 22 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
Python中的变量与常量
Nov 11 Python
python脚本框架webpy模板赋值实现
Nov 20 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
Laravel 5框架学习之环境与配置
2015/04/08 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
php截取视频指定帧为图片
2016/05/16 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
JS常用知识点整理
2017/01/21 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
淮海战役观后感
2015/06/11 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers