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中字符串对齐方法介绍
May 21 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
pandas ix &amp;iloc &amp;loc的区别
Jan 10 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
django 类视图的使用方法详解
Jul 24 Python
python读文件的步骤
Oct 08 Python
Python上下文管理器全实例详解
Nov 12 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 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
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
详解Python中的多线程编程
2015/04/09 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
求职信怎么写范文
2014/05/26 职场文书
篮球比赛策划方案
2014/06/05 职场文书
用Python实现屏幕截图详解
2022/01/22 Python
Python使用openpyxl模块处理Excel文件
2022/06/05 Python