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查看FTP是否能连接成功的方法
Jul 30 Python
Python实现的用户登录系统功能示例
Feb 05 Python
解决pandas 作图无法显示中文的问题
May 24 Python
python re模块的高级用法详解
Jun 06 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
django celery redis使用具体实践
Apr 08 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Python数据分析入门之数据读取与存储
May 13 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
3
2006/10/09 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
js调用css属性写法
2013/09/21 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
Python3多线程操作简单示例
2018/05/22 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python列表元素常见操作简单示例
2019/10/25 Python
python GUI模拟实现计算器
2020/06/22 Python
几个判断型的面试题
2012/07/03 面试题
地理教师岗位职责
2014/03/16 职场文书
文化产业实施方案
2014/06/07 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
市场营销计划书
2019/04/24 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
MySQL创建管理子分区
2022/04/13 MySQL