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程序设计有所帮助。