Python sqlite3事务处理方法实例分析
本文实例讲述了Pythonsqlite3事务处理方法。分享给大家供大家参考,具体如下:
sqlite3事务总结:
在connect()中不传入isolation_level
事务处理:
使用connection.commit()
#!/usr/bin/envpython
#-*-coding:utf-8-*-
'''sqlite3事务总结:
在connect()中不传入isolation_level
事务处理:
使用connection.commit()
分析:
智能commit状态:
生成方式:在connect()中不传入isolation_level,此时isolation_level==''
在进行执行DataModificationLanguage(DML)操作(INSERT/UPDATE/DELETE/REPLACE)时,会自动打开一个事务,
在执行非DML,非query(非SELECT和上面提到的)语句时,会隐式执行commit
可以使用connection.commit()方法来进行提交
注意:
不能和cur.execute("COMMIT")共用
自动commit状态:
生成方式:在connect()中传入isolation_level=None
这样,在任何DML操作时,都会自动提交
事务处理
connection.execute("BEGINTRANSACTION")
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
'''
importsys
importtime
classElapse_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
importsqlite3
#-------------------------------------------------------------------------------
#测试
#
filename='e:/temp/a.db'
defprepare(isolation_level=''):
connection=sqlite3.connect(filename,isolation_level=isolation_level)
connection.execute("createtableIFNOTEXISTSpeople(num,age)")
connection.execute('deletefrompeople')
connection.commit()
returnconnection,connection.cursor()
defdb_insert_values(cursor,count):
num=1
age=2*num
whilenum<=count:
cursor.execute("insertintopeoplevalues(?,?)",(num,age))
num+=1
age=2*num
defstudy_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("selectcount(*)frompeople")
print(cursor.fetchone())
defstudy_case2_autocommit(count):
connection,cursor=prepare(isolation_level=None)
elapse_time=Elapse_time('自动commit')
db_insert_values(cursor,count)
cursor.execute("selectcount(*)frompeople")
print(cursor.fetchone())
defstudy_case3_intelligent_commit_manual(count):
connection,cursor=prepare()
elapse_time=Elapse_time('智能commit即时提交')
db_insert_values(cursor,count)
connection.commit()
cursor.execute("selectcount(*)frompeople")
print(cursor.fetchone())
defstudy_case4_autocommit_transaction(count):
connection,cursor=prepare(isolation_level=None)
elapse_time=Elapse_time('自动commit')
connection.execute("BEGINTRANSACTION;")#关键点
db_insert_values(cursor,count)
connection.execute("COMMIT;")#关键点
cursor.execute("selectcount(*)frompeople;")
print(cursor.fetchone())
if__name__=='__main__':
count=10000
prepare()
foriinrange(5):
#study_case1_intelligent_commit(count)#不提交数据
#study_case2_autocommit(count)#非常缓慢
study_case3_intelligent_commit_manual(count)
study_case4_autocommit_transaction(count)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《PythonSocket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。