浅析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基础教程之对象和类的实际运用
Aug 29 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
python编写Logistic逻辑回归
Dec 30 Python
python使用代理ip访问网站的实例
May 07 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
python命令行工具Click快速掌握
Jul 04 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
pytorch 自定义参数不更新方式
Jan 06 Python
Python ORM编程基础示例
Feb 02 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
LyScript实现绕过反调试保护的示例详解
Aug 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
10条PHP高级技巧[修正版]
2011/08/02 PHP
php中fsockopen用法实例
2015/01/05 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
Python中字典的setdefault()方法教程
2017/02/07 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
python实现简单银行管理系统
2019/10/25 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
预备党员思想汇报范文
2014/01/11 职场文书
集团薪酬管理制度
2014/01/13 职场文书
就业自我评价
2014/02/04 职场文书
保安2014年终工作总结
2014/12/06 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
新年晚会开场白
2015/05/29 职场文书
毕业证明书
2015/06/19 职场文书
党员转正大会主持词
2015/07/02 职场文书
中秋晚会致辞
2015/07/31 职场文书
2016年国陪研修感言
2015/11/18 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript