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 Trie树实现字典排序
Mar 28 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
python实现树形打印目录结构
Mar 29 Python
python实现textrank关键词提取
Jun 22 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
Python 中由 yield 实现异步操作
May 04 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
Python实现给PDF添加水印的方法
Jan 25 Python
python中pyqtgraph知识点总结
Jan 26 Python
python 将Excel转Word的示例
Mar 02 Python
python爬虫--selenium模块
Mar 31 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
PHP 文件类型判断代码
2009/03/13 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
vuex 的简单使用
2018/03/22 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
python实现微信远程控制电脑
2018/02/22 Python
对python的文件内注释 help注释方法
2018/05/23 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python匿名函数用法实例分析
2019/08/03 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
毕业生求职的求职信
2013/12/05 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
明确岗位职责
2015/02/14 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
英镑符号 £
2022/02/17 杂记
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers