浅析Python中MySQLdb的事务处理功能
作者:daisy 发布时间:2024-01-14 01:23:10
标签:python,mysqldb,事务
前言
任何应用都离不开数据,所以在学习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语句)作为参数,返回事务执行状态即可。以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。


猜你喜欢
- 先说结论1. oracle: oracle 默认没有排序规则2. mysql2.1 innoDB引擎: 默认查询按照id正序排序2.2 my
- 为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式。Internet Explorer、Mozilla Firefox 和 Oper
- 很多朋友使用Dreamweaver一段时间后,开始热衷于寻找各式各样的插件,追求各种各样的特效,而对于Dreamweaver中的基本功能反而
- 目录一、图解二、json.loads()用法三、json.load()用法四、此外还有一种json.dumps语法实例一、图解json.lo
- 1. 什么是虚拟环境?虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰。举个例子吧。假设我们的
- 本文实例讲述了Python使用re模块实现信息筛选的方法。分享给大家供大家参考,具体如下:背景平时工作中,我们经常会处理大量的元数据(Raw
- index_selectanchor_w = self.FloatTensor(self.scaled_anchors).index_sel
- 本文实例讲述了Django返回json数据用法。分享给大家供大家参考,具体如下:1、前端。jQuery发送GET请求,并解析json数据。g
- Python import .pyd文件时会搜索sys.path列表中的路径运行import xxx.pyd1. 'ImportEr
- 每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:(r'^artic
- 一、验证码示例 二、php验证码类,secoder.class.php<?php/** * 安全验证码 * * 安全的验证码要:验证
- 实例如下:</pre><pre name="code" class="python"
- git和svn有什么区别呢?git采用分布式版本库管理,而svn采用集中式版本库管理。集中式版本库管理需要有一台存放版本库的服务器,开发人员
- asp定时生成静态HTML的代码,对于缓解服务器压力有很大帮主,需要的朋友可以参考下。<% '判断是否要生成新的HT
- 如下所示:matrix.py#!/usr/bin/python# -*- encoding:UTF-8-*-import pprintimp
- 今天无意在坛子里看到这样一个求救帖(这里),看了一下,感觉问题比较好解决。但是问题背后的问题却引起了我的反思。把他的页面整理一下看看(为了便
- 上次成功升级了最土商业版,接下来就是整合公司的社区网站,先说明一下我现在工作的地方是个地方社区网站,用的基础程序是PHPWind,我的任务就
- 本文目标:使用selenium3.0+python3操纵浏览器,打开百度网站。(相当于selenium的hello world)环境基础:p
- 一、题目要求用原生Python实现knn分类算法。二、题目分析数据来源:鸢尾花数据集(见附录Iris.txt)数据集包含150个数据集,分为
- 亮度调整非线性亮度调整:对于R,G,B三个通道,每个通道增加相同的增量。线性亮度调整:利用HSL颜色空间,通过只对其L(亮度)部分调整,可达