@contextmanager 和yield 的结合使用法

news/2024/4/19 19:20:04/

为了保持一个事物的完整性,我们一般都会这样写:

try:sql1sql2sql.commit()
except:sql.rollback()

但是每次都这样try...except...就会显得很重复。

所以要引用装饰器@contextmanager,它需要与with语法结合使用
先看下简单的例子:

from  contextlib import contextmanager
class A:def f1(self):print('2')@contextmanager
def get_A():print('1')yield A()print('3')with get_A() as a:a.f1()
#执行结果会依次打印:
1
2
3

上面这个例子,我们可以把print('1') 和 print('3')看成是try和except,要执行代码的部分就是他们中间的部分,进行以下更改

class B:@contextmanagerdef commit(self):try:yieldsql.commit()except:sql.rollback()bb = B()with bb.commit():sql1= "sql1"sql2 = "sql2"

先执行commit(),遇到yield后,跳出来执行sql1,sql2,然后再进入commit()执行上一次跳出来的位置


 


http://www.ppmy.cn/news/39435.html

相关文章

git clone connect to gitlab sign in token弹窗让我输入用户名和密码

系列文章目录 文章目录系列文章目录前言前言 当我使用git bash输入命令:git clone https://gitlab.freedesktop.org/raqm/raqm.git libraqm 弹窗 ASUSLAPTOP-0R30I78P MINGW64 /e/krita-dev $ git clone https://gitlab.freedesktop.org/raqm/raqm.git libraqm C…

《JavaEE》HashTable、HashMap、ConcurrentHashMap

目录 HashTable HashMap ConcurrentHashMap ​编辑 HashTable与ConcurrentHashMap的区别 👑作者主页:Java冰激凌 📖专栏链接:JavaEE 进入到线程模块 必不可少的就是接触到线程安全的数据结构 例如StringBuffer、BlockingQueu…

2023年造林绿化施工单位丙级资质,新申请要配备多少个人员呢?

(一)新申请资质程序: 1.网上申请。 2.书面材料报送。 (二)资质等级:分为甲级、乙级、丙级三个等级。 (三)丙级施工单位资质条件: 3.1 资历和信誉 应同时具备以下条…

常量和符号常量(C语言)

常量和符号常量一、常量(一)常量的定义在程序运行过程中,其值不能被改变的量称为常量。(二)常量的数据类型整型常量(1) 整型常量就是整常数。(2) 整型常量的表现形式&…

随笔-如果我有两百万就好了

前天晚上十点,小付给我发了个微信,说先前带他买房的中介得到消息,在他同楼二单元有套房子在售,房主要求全款,230万,让我考虑下。 和媳妇儿算了算,距离230还有很大的差距,如果借债&a…

Apache Pulsar的Connector连接器使用

目录1. 背景2. 介绍3. Pulsar Flink Connector3.1 Flink读取Pulsar消息3.1 Flink发送消息到Pulsar1. 背景 虽然可以使用produce和consume的API进行消息的发送和消费,但Pulsar提供了一种更简便的方式,用来同步其它系统的数据到Pulsar的topic,…

Centos安装docker以及通过docker部署Mysql,照做就行!

1.安装docker 1.1给虚拟机联网(反斜杠带表该语句没写完) yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken 1.2更新本地文件镜像 # 设置docker镜像源 yum-config-manager \--add-repo \https://mirrors.aliyun.com/doc…

数据库系列之MySQL线程ID和操作系统线程ID对应关系

在日常运维工作中,MySQL数据库服务器出现SQL语句执行导致服务器CPU使用率突增,如何通过现有手段快速定位排查到哪个SQL语句,并采取应急措施。本文介绍基于传统的操作系统线程的CPU使用监控手段入手,利用操作系统线程ID和MySQL线程…

联想笔记本功能键切换Fn+ESC

按下FnESC可以切换 Fn键的常驻状态。

华为阿里版ChatGPT横空出世,谁的成效更好呢?

“你训练的大模型涌现了吗?”“还没有。好难受。”一时间成为了最近AI赛道玩家的一个爆热梗。 不管承不承认,相信每个玩家都不愿意输掉这场激烈的竞争。自百度成为国内“第一个吃螃蟹的人”后,又有两大中国科技巨头做好了准备——华为和阿里…

vue dom 更新nextTick

this.$nextTick(()>{this.$refs.child.childPay();});

Go面试题-解析输入字符串行数据字段信息

同事分享了一道Go的算法面试题,下面是基于字符串分析的go代码,在写的时候特意将最后一行数据加大复杂度,给大家分享一下: 字符输入规则如下: a. 每行表示一条记录,字段之间以逗号(,&#xff0…

Redis中的BigKey问题:排查与解决思路

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录摘要Big Key问题介绍Big Key问题排查使用BIGKEYS命令Debug Objectmemory usageredis-rdb-toolsBig Key问题解决思路分割大key对象压缩直接删除总结摘要 Redis是一款性能强劲的内存数据库&#xff0c…

URL编码和解析

1.什么是URL? URL(Uniform Resource Locator,统一资源定位符)是互联网上标准资源的地址,互联网上每个文件(即资源)都有一个唯一的URL,它包含了文件的位置以及浏览器处理方式等信息。 URL 标准格式 通常而言,我们所熟…

数据处理-4.现代企业的核心公式

现代企业核心公式:收入流量付费率 ARPU ARPU即Average Revenue Per User,指的是一个时期内(通常为一个月或一年)电信运营企业平均每个用户贡献的通信业务收入,其单位为元/户。从计算的角度看,ARPU值的大小取决于两个因素&#xff…

Android之制作App的图标

在过去,Android应用程序的图标都是应该放到相应的分辨率的mipmap目录下,不过从Android8.0开始,Google已经不再建议使用单一的一张图片来作为应用程序的图标,而是应该使用前景和背景分离的图标设计方式。具体来讲,应用程…

【python设计模式】18、仲裁者模式

哲学思想: 仲裁者模式是一种软件设计模式,它的哲学思想是将对象之间的交互行为转移到第三方对象,以避免直接耦合。该模式的核心思想是:当对象之间需要通信时,它们不直接相互交互,而是通过一个中介者对象来…

电脑+浏览器——黑色护眼

电脑浏览器——黑色护眼电脑办公Excel主题,黑色表格,黑色背景电脑办公 Excel https://www.kewenba.com/12562.html 主题,黑色 表格,黑色背景 【页面布局】-【背景】,然后选择一张黑色图片

web基础

web基础 与http 域名:由于IP地址不易记忆,域名用来代替IP地址, (DNS)服务与配置:先在本地hosts里去找,然后在本地域名服务器递归查找,本地域名服务器在一级二级按域名长度迭代查找后…

STM32F4_串口通信详解

目录 1. 串口相关介绍及使用 1.1 串口设置的一般步骤: 1.1.1 串口时钟和GPIO时钟使能 1.1.2 设置引脚复用器映射 1.1.3 GPIO端口模式设置 1.1.4 串口参数初始化 1.1.5 开启中断并且初始化NVIC,使能中断 1.1.6 使能串口 1.1.7 串口数据发送与接收…