浅析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中的引用和拷贝浅析
Nov 22 Python
python如何实现远程控制电脑(结合微信)
Dec 21 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
matplotlib作图添加表格实例代码
Jan 23 Python
django中send_mail功能实现详解
Feb 06 Python
Python3中exp()函数用法分析
Feb 19 Python
Python单元和文档测试实例详解
Apr 11 Python
python微信撤回监测代码
Apr 29 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
Python 3.9的到来到底是意味着什么
Oct 14 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
德生PL550的电路分析
2021/03/02 无线电
smarty模板判断数组为空的方法
2015/06/10 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python http接口自动化脚本详解
2018/01/02 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
python中安装django模块的方法
2020/03/12 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
struct和class的区别
2015/11/20 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
高三英语教学反思
2014/01/13 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
死亡赔偿协议书
2015/01/28 职场文书
匿名检举信范文
2015/03/02 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python