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下读取公私钥做加解密实例详解
Mar 29 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
python导入模块交叉引用的方法
Jan 19 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
python编写微信公众号首图思路详解
Dec 13 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
如何利用pygame实现打飞机小游戏
May 30 Python
Python使用openpyxl批量处理数据
Jun 23 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
JS delegate与live浅析
2013/12/21 Javascript
JavaScript中Function详解
2015/02/27 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Python基础知识点 初识Python.md
2019/05/14 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python3离线安装Requests模块问题
2019/10/13 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python类继承和多态原理解析
2020/02/05 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
学生出入校管理制度
2014/01/16 职场文书
给物业的表扬信
2014/01/21 职场文书
企业党员个人自我评价
2014/09/20 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
平安建设汇报材料
2014/12/29 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL