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 相关文章推荐
gearman的安装启动及python API使用实例
Jul 08 Python
bpython 功能强大的Python shell
Feb 16 Python
Python文件处理
Feb 29 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
django-allauth入门学习和使用详解
Jul 03 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
python制作英语翻译小工具代码实例
Sep 09 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
什么是Python包的循环导入
Sep 08 Python
python 如何读、写、解析CSV文件
Mar 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
APMServ使用说明
2006/10/23 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
javascript 学习笔记(onchange等)
2010/11/14 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
nodejs教程之入门
2014/11/21 NodeJs
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Selenium定位元素操作示例
2018/08/10 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python常用数据重复项处理方法
2019/11/22 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
农村婚礼证婚词
2014/01/08 职场文书
自荐信格式简述
2014/01/25 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
机械专业技术员求职信
2014/06/14 职场文书
超市店庆活动方案
2014/08/31 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
详解nginx location指令
2022/01/18 Servers
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python