浅析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 02 Python
Python中模块与包有相同名字的处理方法
May 05 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
Python自定义简单图轴简单实例
Jan 08 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
使用Pytorch来拟合函数方式
Jan 14 Python
解决python replace函数替换无效问题
Jan 18 Python
python十进制转二进制的详解
Feb 07 Python
解决Django no such table: django_session的问题
Apr 07 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 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
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
javaScript中push函数用法实例分析
2015/06/08 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
用Python编写简单的微博爬虫
2016/03/04 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
简单实现Python爬取网络图片
2018/04/01 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python selenium 弹出框处理的实现
2019/02/26 Python
python安装pil库方法及代码
2019/06/25 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python中dict()的高级用法实现
2019/11/13 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python3列表List入门知识附实例
2020/02/09 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
市场专员岗位职责
2014/02/14 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
家属联谊会致辞
2015/07/31 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
python 详解turtle画爱心代码
2022/02/15 Python