python 封装try/except事务回滚

2021-07-14  本文已影响0人  wyc0859
try catch事务回滚,常见写法
def a():
        try:
            ......
            db.session.add(data)
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            raise e

如何封装try catch事务回滚

上下文管理器 结合 with

新建一个文件
@contextmanager 上下文管理器的装饰器

class SQLAlchemy(_SQLAlchemy): 

    @contextmanager
    def auto_commit(self):
        try:
            print("*****先进来了***")
            yield   # yield为中断,有yield说明这是一个生成器,到这里就跳出去
            #执行完装饰器装饰的内容后,又进入继续
            self.session.commit()
        except Exception as e:
            db.session.rollback()
            raise e

db = SQLAlchemy()

封装后的写法
with用法,先执行条件表达式

from app.base import db    # 引入上面文件

def b(x):
   with db.auto_commit():
            ......
            db.session.add(data)
上一篇 下一篇

猜你喜欢

热点阅读