美文网首页
python 封装try/except事务回滚

python 封装try/except事务回滚

作者: wyc0859 | 来源:发表于2021-07-14 11:06 被阅读0次
    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)
    

    相关文章

      网友评论

          本文标题:python 封装try/except事务回滚

          本文链接:https://www.haomeiwen.com/subject/jufypltx.html