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 相关文章推荐
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python中django学习心得
Dec 06 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python开启debug模式的方法
Jun 27 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
python tkinter模块的简单使用
Apr 07 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 Python
python神经网络 使用Keras构建RNN训练
May 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 输出缓存详解
2009/06/20 PHP
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
基于Angularjs实现分页功能
2016/05/30 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
python抽取指定url页面的title方法
2018/05/11 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
如何理解python面向对象编程
2020/06/01 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
彪马法国官网:PUMA法国
2019/12/15 全球购物
广州盈通面试题
2015/12/05 面试题
学前教育求职自荐信范文
2013/12/25 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
优秀员工评优方案
2014/06/13 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
小学英语课教学反思
2016/02/15 职场文书
请假条应该怎么写?
2019/06/24 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
python基础之//、/与%的区别详解
2022/06/10 Python