Python sqlite3事务处理方法实例分析


Posted in Python onJune 19, 2017

本文实例讲述了Python sqlite3事务处理方法。分享给大家供大家参考,具体如下:

sqlite3事务总结:

在connect()中不传入 isolation_level

事务处理:

使用connection.commit()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''sqlite3事务总结:
在connect()中不传入 isolation_level
事务处理:
  使用connection.commit()
分析:
  智能commit状态:
    生成方式: 在connect()中不传入 isolation_level, 此时isolation_level==''
      在进行 执行Data Modification Language (DML) 操作(INSERT/UPDATE/DELETE/REPLACE)时, 会自动打开一个事务,
      在执行 非DML, 非query (非 SELECT 和上面提到的)语句时, 会隐式执行commit
      可以使用 connection.commit()方法来进行提交
    注意:
      不能和cur.execute("COMMIT")共用
  自动commit状态:
    生成方式: 在connect()中传入 isolation_level=None
      这样,在任何DML操作时,都会自动提交
    事务处理
      connection.execute("BEGIN TRANSACTION")
      connection.execute("COMMIT")
    如果不使用事务, 批量添加数据非常缓慢
数据对比:
  两种方式, 事务耗时差别不大
  count = 100000
    智能commit即时提交耗时: 0.621
    自动commit耗时: 0.601
    智能commit即时提交耗时: 0.588
    自动commit耗时: 0.581
    智能commit即时提交耗时: 0.598
    自动commit耗时: 0.588
    智能commit即时提交耗时: 0.589
    自动commit耗时: 0.602
    智能commit即时提交耗时: 0.588
    自动commit耗时: 0.622
'''
import sys
import time
class Elapse_time(object):
  '''耗时统计工具'''
  def __init__(self, prompt=''):
    self.prompt = prompt
    self.start = time.time()
  def __del__(self):
    print('%s耗时: %.3f' % (self.prompt, time.time() - self.start))
CElapseTime = Elapse_time
import sqlite3
# -------------------------------------------------------------------------------
# 测试
#
filename = 'e:/temp/a.db'
def prepare(isolation_level = ''):
  connection = sqlite3.connect(filename, isolation_level = isolation_level)
  connection.execute("create table IF NOT EXISTS people (num, age)")
  connection.execute('delete from people')
  connection.commit()
  return connection, connection.cursor()
def db_insert_values(cursor, count):
  num = 1
  age = 2 * num
  while num <= count:
    cursor.execute("insert into people values (?, ?)", (num, age))
    num += 1
    age = 2 * num
def study_case1_intelligent_commit(count):
  '''
  在智能commit状态下, 不能和cur.execute("COMMIT")共用
  '''
  connection, cursor = prepare()
  elapse_time = Elapse_time(' 智能commit')
  db_insert_values(cursor, count)
  #cursor.execute("COMMIT") #产生异常
  cursor.execute("select count(*) from people")
  print (cursor.fetchone())
def study_case2_autocommit(count):
  connection, cursor = prepare(isolation_level = None)
  elapse_time = Elapse_time(' 自动commit')
  db_insert_values(cursor, count)
  cursor.execute("select count(*) from people")
  print (cursor.fetchone())
def study_case3_intelligent_commit_manual(count):
  connection, cursor = prepare()
  elapse_time = Elapse_time(' 智能commit即时提交')
  db_insert_values(cursor, count)
  connection.commit()
  cursor.execute("select count(*) from people")
  print (cursor.fetchone())
def study_case4_autocommit_transaction(count):
  connection, cursor = prepare(isolation_level = None)
  elapse_time = Elapse_time(' 自动commit')
  connection.execute("BEGIN TRANSACTION;") # 关键点
  db_insert_values(cursor, count)
  connection.execute("COMMIT;") #关键点
  cursor.execute("select count(*) from people;")
  print (cursor.fetchone())
if __name__ == '__main__':
  count = 10000
  prepare()
  for i in range(5):
    #study_case1_intelligent_commit(count) #不提交数据
    #study_case2_autocommit(count) #非常缓慢
    study_case3_intelligent_commit_manual(count)
    study_case4_autocommit_transaction(count)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python写日志封装类实例
Jun 28 Python
Python打包可执行文件的方法详解
Sep 19 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
python银行系统实现源码
Oct 25 Python
Python socket模块方法实现详解
Nov 05 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
Django import export实现数据库导入导出方式
Apr 03 Python
Python之str操作方法(详解)
Jun 19 #Python
python urllib爬取百度云连接的实例代码
Jun 19 #Python
Python的IDEL增加清屏功能实例
Jun 19 #Python
利用python爬取散文网的文章实例教程
Jun 18 #Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 #Python
python实现各进制转换的总结大全
Jun 18 #Python
Mac 上切换Python多版本
Jun 17 #Python
You might like
利用js调用后台php进行数据处理原码
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php实现session共享的实例方法
2019/09/19 PHP
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
港湾网络笔试题
2014/04/19 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
生物制药自我鉴定
2014/01/25 职场文书
重阳节登山活动方案
2014/02/03 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
秋季运动会开幕词
2015/01/28 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
《观察物体》教学反思
2016/02/17 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python实现为PDF去除水印的示例代码
2022/04/03 Python
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers