
1.每一个 session 是否在当前请求结束后自动销毁? 2.如果执行 commit 出错,需不需要进行回滚? 3.如果需要进行回滚,应该怎么写?(在每一个 commit 操作地方写 rollback?有没有类似装饰器的方法?) 烦请各位大佬指教一下..
1 Macv1994 OP ```python def db_exception_handle(db): def decorator(func): @wraps(func) def decorated_function(*args, **kwargs): try: return func(*args, **kwargs) except: db.session.rollback() abort(500) return decorated_function return decorator ``` 这样子写不知道是否可以,传进来的 db 不知道是不是当前请求上下文环境。测试了一下感觉没问题。 |
2 ila Sep 24, 2020 via Android 有开始事务的参数配置,看官方文档 |
3 qile1 Sep 25, 2020 via Android 数据库执行时候有事物回滚语句,把回滚语句放到异常处理里面 |
5 lilililili1010 Sep 29, 2020 ``` from flask_sqlalchemy import SQLAlchemy as _SQLAlchemy class SQLAlchemy(_SQLAlchemy): @contextmanager def auto_commit(self, throw=True): try: yield self.session.commit() except Exception as e: self.session.rollback() current_app.logger.exception('%r' % e) if throw: raise e ``` |