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 相关文章推荐
Django中模版的子目录与include标签的使用方法
Jul 16 Python
Python logging模块用法示例
Aug 28 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
python分数表示方式和写法
Jun 26 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
jupyter notebook的安装与使用详解
May 18 Python
python如何使用腾讯云发送短信
Sep 17 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP中的string类型使用说明
2010/07/27 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
8个必备的PHP功能开发
2015/10/02 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
Bootstrap插件全集
2016/07/18 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
税务干部鉴定材料
2014/02/11 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
python文件与路径操作神器 pathlib
2022/04/01 Python
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏