@contextmanager 和yield 的结合使用法

news/2025/2/19 2:37:35/

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

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线程…