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 字符串定义
Sep 25 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
python编程实现清理微信重复缓存文件
Nov 01 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 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 array_unique之后json_encode需要注意
2011/01/02 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
javascript各种复制代码收集
2008/09/20 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Django使用rest_framework写出API
2020/05/21 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
研发工程师的岗位职责
2013/11/18 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
致100米运动员广播稿
2014/02/14 职场文书
企业形象策划方案
2014/05/29 职场文书
简易版租房协议书范本
2014/10/13 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers