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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
Python多线程threading模块用法实例分析
May 22 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
Python实现自动玩连连看的脚本分享
Apr 04 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随机获取金山词霸每日一句的方法
2015/07/09 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
python实现各种插值法(数值分析)
2019/07/30 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
经典优秀个人求职自荐信格式
2013/09/25 职场文书
全神贯注教学反思
2014/02/03 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
基层党组织整改方案
2014/10/25 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
信用卡工资证明范本
2015/06/19 职场文书
昆虫记读书笔记
2015/06/26 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
JavaScript的function函数详细介绍
2021/11/20 Javascript
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android