浅析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代码制作configure文件示例
Jul 28 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python列表删除的三种方法代码分享
Oct 31 Python
python ansible服务及剧本编写
Dec 29 Python
基于python绘制科赫雪花
Jun 22 Python
python读取文本中的坐标方法
Oct 14 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
python输出国际象棋棋盘的实例分享
Nov 26 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
深入解析Python中的线程同步方法
2016/06/14 Python
Python实现随机漫步功能
2018/07/09 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
python属于哪种语言
2020/08/16 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
车间核算员岗位职责
2014/07/01 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
逃课检讨书
2015/01/26 职场文书
初中语文教学随笔
2015/08/15 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android