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)
网友评论