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深入学习之上下文管理器
Aug 31 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python NumPy库安装使用笔记
May 18 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
深入PHP中的HashTable结构详解
2013/06/13 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
Python字符串的一些操作方法总结
2019/06/10 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
python interpolate插值实例
2020/07/06 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
盛大笔试题
2016/11/05 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
小学后勤管理制度
2014/01/14 职场文书
秋季运动会活动方案
2014/02/05 职场文书
党员入党表决心的话
2014/03/11 职场文书
毕业生就业协议书
2014/04/11 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年加油站工作总结
2014/12/04 职场文书
工程部部长岗位职责
2015/02/12 职场文书
解除租赁合同协议书
2016/03/21 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书