浅析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语句)作为参数,返回事务执行状态即可。以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。
相关推荐
-
Python sqlite3事务处理方法实例分析
本文实例讲述了Python sqlite3事务处理方法.分享给大家供大家参考,具体如下: sqlite3事务总结: 在connect()中不传入 isolation_level 事务处理: 使用connection.commit() #!/usr/bin/env python # -*- coding:utf-8 -*- '''sqlite3事务总结: 在connect()中不传入 isolation_level 事务处理: 使用connection.commit() 分析: 智能commit状
-
python连接oracle数据库实例
本文实例讲述了python连接oracle数据库的方法,分享给大家供大家参考.具体步骤如下: 一.首先下载驱动:(cx_Oracle) http://www.python.net/crew/atuining/cx_Oracle/ 不过要注意一下版本,根据你的情况加以选择. 二.安装: 首先配置oracle_home环境变量 执行那个exe安装程序就可以了,它会copy一个cx_Oracle.pyd到Libsite-packages目录下. 如果是linux,执行 复制代码 代码如下: pytho
-
Python实现完整的事务操作示例
本文实例讲述了Python事务操作实现方法.分享给大家供大家参考,具体如下: #coding=utf-8 import sys import MySQLdb class TransferMoney(object): def __init__(self,conn): self.conn = conn #检查账户是否合法 def check_acct_avaiable(self,acctid): cursor = self.conn.cursor() try: sql = "select * fro
-
python连接mongodb操作数据示例(mongodb数据库配置类)
一.相关代码数据库配置类 MongoDBConn.py 复制代码 代码如下: #encoding=utf-8''' Mongo Conn连接类''' import pymongo class DBConn: conn = None servers = "mongodb://localhost:27017" def connect(self): self.conn = pymongo.Connection(self.servers) def close(self
-
Python操作MySQL数据库9个实用实例
在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1.取得 MYSQL 的版本 # -*- coding: UTF-8 -*- #安装 MYSQL DB for python import MySQLdb as mdb con
-
Python读写Redis数据库操作示例
使用Python如何操作Redis呢?下面用实例来说明用Python读写Redis数据库.比如,我们插入一条数据,如下: 复制代码 代码如下: import redis class Database: def __init__(self): self.host = 'localhost' self.port = 6379 def write(self,website,city,year,month,day,deal_number):
-
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 代码如下: ed_user = User('ed', 'Ed Jones', 'edspassword')session.add(ed_user) 上面两段代码执行完后对象持久化了么?你或许会兴冲冲的跑去数据库里查看,结果却失望而归--数据库里什么都没有.为什么呢?因为SQLAlchemy采取的是
-
使用Python的Django框架实现事务交易管理的教程
如果你花费了很多的时间去进行Django数据库事务处理的话,你将会了解到这是让人晕头转向的. 在过去,只是提供了简单的基础文档,要想清楚知道它是怎么使用的,还必须要通过创建和执行Django的事务处理. 这里有众多的Django事务处理的名词,例如:commit_on_success , commit_manually , commit_unless_maneged,rollback_unless_managed,enter_transaction_management,leace_transa
-
python django事务transaction源码分析详解
python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少劲就是不行,现在记下要用的人少走弯路 version:Django 1.8 事务官方文档 事务中文文档里面介绍很多方法,不一一赘述,按照文档即可,下面只分析下atomic方法的源码 按照官方文档 transaction.atomic 有两种用法装饰器和上下文管理器 # atomic() 方法 # from django.db import transaction ####
-
python连接mysql并提交mysql事务示例
复制代码 代码如下: # -*- coding: utf-8 -*-import sysimport MySQLdbreload(sys)sys.setdefaultencoding('utf-8')class DB(object): def __init__(self,host='127.0.0.1',port=3306,user='root',passwd='123',database=''): self.__host=host self.__port=port self.__user
随机推荐
- python使用PyGame模块播放声音的方法
- javascript RegExp 对象属性与方法和应用
- 最好的8个Java RESTful框架
- JavaEE中关于ServletConfig的小结
- oracle 触发器 学习笔记
- JS 拼凑字符串的简单实例
- 一步步打造简单的MVC电商网站BooksStore(1)
- 用PHP和ACCESS写聊天室(二)
- BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
- php获取url字符串截取路径的文件名和扩展名的函数
- 不是原型继承那么简单!!prototype的深度探索
- Python 获取新浪微博的最新公共微博实例分享
- CSS网页布局入门教程2:一列自适应宽度
- 基于javascript的在火狐里面强制换行字符
- Node.js通过身份证号验证年龄、出生日期与性别方法示例
- LCL.VBS 病毒源代码
- MySql中使用INSERT INTO语句更新多条数据的例子
- Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)
- Android Service判断设备联网状态详解
- 字符串中找出连续最长的数字字符串的实例代码