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基础教程之udp端口扫描
Feb 10 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
Python中遍历列表的方法总结
Jun 27 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
django正续或者倒序查库实例
May 19 Python
keras的三种模型实现与区别说明
Jul 03 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 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实现定时执行任务的方法
2014/10/05 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
javascript获取系统当前时间的方法
2015/11/19 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python内存管理分析
2015/04/08 Python
Android分包MultiDex策略详解
2017/10/30 Python
python enumerate函数的使用方法总结
2017/11/15 Python
PyQt5实现下载进度条效果
2018/04/19 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
python -v 报错问题的解决方法
2020/09/15 Python
python编程的核心知识点总结
2021/02/08 Python
html5的localstorage详解
2017/05/09 HTML / CSS
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
大专会计自我鉴定
2014/02/06 职场文书
大型营销活动计划书
2014/04/28 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
如何在Python中创建二叉树
2021/03/30 Python
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技