当前位置: 首页 > news >正文

asp网站代码 部分封装东莞网站网络

asp网站代码 部分封装,东莞网站网络,网站建设与实践,jsp网站 值班如题#xff0c;本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制。1、python上下文管理(with)python上下文管理(context)#xff0c;解决的是这样一类问题#xff0c;在进入逻辑之前需要进行一些准备工作#xff0c;在退出逻辑之前需要进…如题本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制。1、python上下文管理(with)python上下文管理(context)解决的是这样一类问题在进入逻辑之前需要进行一些准备工作在退出逻辑之前需要进行一些善后工作上下文管理可以使得这种场景变得清晰和可控。with语句是python上下文管理的基本用法例如读写文件with open(filea, r) as f:f.readlines()file使用的就是上下文管理机制这样对于打开文件句柄和释放文件句柄无须我们额外的投入精力。2、sqlite3sqlite3是一个嵌入式的文件数据库无须开启额外的进程和端口就可以通过文件读取的方式实现数据库的操作。优点是轻量级并且支持事务和触发器等高级特性。sqlite3在python句柄创建和管理上跟mysql表现的很相似。3、代码我们先贴上本文简述的这段代码然后后面我们在做详细解释。#-*- coding:utf-8 -*-importsqlite3importtracebackclassSqliteDB(object):def __init__(self, databasesqlitedb, isolation_level, ignore_excFalse):self.databasedatabaseself.isolation_levelisolation_levelself.ignore_excignore_excself.connectionNoneself.cursorNonedef __enter__(self):try:self.connection sqlite3.connect(databaseself.database, isolation_levelself.isolation_level)self.cursorself.connection.cursor()returnself.cursorexceptException, ex:traceback.print_exc()raiseexdef __exit__(self, exc_type, exc_val, exc_tb):try:if not exc_type isNone:self.connection.rollback()returnself.ignore_excelse:self.connection.commit()exceptException, ex:traceback.print_exc()raiseexfinally:self.cursor.close()self.connection.close()我们给出一个使用的caseif __name__ __main__:#建表with SqliteDB(test) as db:db.execute(create table if not exists user (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(100), age INTEGER))#创建一条记录, 如果抛出异常, 可以测试事务回滚with SqliteDB(test) as db:db.execute(insert into user (name, age) values (?, ?), (Tom, 10))#raise Exception()#查询记录with SqliteDB(test) as db:query_set db.execute(select * from user where name? limit ?, (Tom, 100,)).fetchall()printlen(query_set)for item inquery_set:printitem#删除记录with SqliteDB(test) as db:query_set db.execute(delete from user where name?, (Tom,))可以看到通过with语句打开了数据库的句柄执行数据库操作后我们并没有管理句柄的释放和事务回滚。代码的输出是1(6, uTom, 10)当打开raise Exception()的注释表示在插入的过程中遇到了异常。这时候所有connection中未被提交的数据将被回滚。那么这些如何做到的呢上下文管理是通过类SqliteDB中的__enter__和__exit__两个魔法函数实现的。1、enter函数用来实现处理进入with_body之前的准备工作这里是创建connect和cursorenter方法返回了cursor。enter函数如果有返回值那么可以赋值给as后面的变量如果没有返回可以简单的去掉as子句即可。我们给出一个没有as子句的例子lock threading.Lock()with lock:pass如果enter函数抛出异常那么在执行with语句的时候会抛出这个异常并且中断程序。2、逻辑上enter函数之后便开始执行with_body内的代码with_body里的代码包含sql语句和一些业务逻辑这里说明一下只要是抛出异常就会触发事务的回滚机制而不会区分到底是sql语句执行异常还是业务逻辑出现的异常。3、exit函数在with_body执行成功或者抛出异常后会执行exit函数。exit函数传入三个变量分别是exc_type异常类型exc_val异常值exc_tb错误堆栈信息。如果程序正常那么三个值都是None相反如果不是None那么可以就此判断with_body产生了异常。这里我们判断了exc_type是否为None来区分是否抛出了异常如果抛出了异常我们使用connection.rollback进行了事务的回滚否则我们使用connection.commit进行事务提交。要注意的是在出现异常的时候返回了一个ignore_exc这个返回如果是True表示忽略这个异常这个异常将不会向上级调用抛出如果返回的是None或者False异常将会向上抛出。实际中我们还是希望异常能够跑出来方便处理所以这里我们默认为False。注意isolation_level这个字段是隔离级别这里我们不做深入的说明。需要知道的是这个字段1)传入空字符串‘’表示手动提交commit这时需要程序中显示的执行connection.commit进行事务提交sql中的dml语句才会生效。2)传入None表示开启自动提交这时候自动提交commit无需在程序中connection.commit进行事务提交。
http://www.pierceye.com/news/254206/

相关文章:

  • 网站文件目录结构wordpress 短信发送
  • 合肥专业做网站的公司东莞阳光网投诉电话
  • 网站呢建设英雄联盟更新公告最新
  • 做ps图标什么网站最好免费微网站怎么做
  • 网站建设与网络编辑综合实训课程指导手册pdf软件外包
  • 网站开发规划书怎么写wordpress前端会员中心
  • asp.net网站建设实战 pdfWordpress媒体库途径
  • 开家网站设计公司优化游戏性能的软件
  • php企业网站开发pdfdede5.7网站搬家
  • 珠海建设网站的公司哪家好精品wordpress 模板
  • 企业网站建设和实现 论文沧州最新消息今天
  • 连云港做企业网站公司wordpress小工具上下
  • 新房网站建设公司手机制作app需要什么软件
  • 网站备案登记表网站建设及规划
  • 彩票网站建设平台wordpress模板怎么改织梦
  • 商业中心 网站建设怎么创建自己的官网
  • 中国建设银行总行官方网站宁波网站推广渠道
  • 网站备案的网站名称分类信息网址
  • 教育类网站建站jae安装wordpress
  • wordpress自定义站点设计网站广告语
  • 广告型网站怎么做的网络技术学习网站
  • 网站建设公司不赚钱进一步推进网站建设
  • 四川省工程建设协会网站360路由器网站建设
  • 快云服务器怎么做网站360网站收录提交入口大全
  • 网站设计的安全尺寸正规的培训行业网站开发
  • 网站提交了被收录后改怎么做商丘网站制作教程
  • 建网站被封了网站建设网页设计小江
  • 用node做的网站索引网站有哪些
  • 无锡设计网站建设时尚杂志网站设计分析
  • 嘉定区网站建设网站建设怎么谈