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 2020-09-24 14:34:18 +08:00 via Android
有开始事务的参数配置,看官方文档
|
3
qile1 2020-09-25 16:52:48 +08:00 via Android
数据库执行时候有事物回滚语句,把回滚语句放到异常处理里面
|
4
Macv1994 OP @qile1 恩,这个我知道,但是数据库操作的地方很多呀,怎么处理比较方便一点,不能在每个地方都写一个 try...except 语句吧...
|
5
lilililili1010 2020-09-29 15:10:36 +08:00
```
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 ``` |