V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Macv1994
V2EX  ›  Python

关于 flask-sqlachemy 数据库回滚的问题

  •  1
     
  •   Macv1994 ·
    weijiang1994 · 2020-09-24 14:14:42 +08:00 · 1793 次点击
    这是一个创建于 1556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.每一个 session 是否在当前请求结束后自动销毁? 2.如果执行 commit 出错,需不需要进行回滚? 3.如果需要进行回滚,应该怎么写?(在每一个 commit 操作地方写 rollback?有没有类似装饰器的方法?) 烦请各位大佬指教一下..

    5 条回复    2020-09-29 15:10:36 +08:00
    Macv1994
        1
    Macv1994  
    OP
       2020-09-24 14:29:44 +08:00
    ```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 不知道是不是当前请求上下文环境。测试了一下感觉没问题。
    ila
        2
    ila  
       2020-09-24 14:34:18 +08:00 via Android
    有开始事务的参数配置,看官方文档
    qile1
        3
    qile1  
       2020-09-25 16:52:48 +08:00 via Android
    数据库执行时候有事物回滚语句,把回滚语句放到异常处理里面
    Macv1994
        4
    Macv1994  
    OP
       2020-09-27 10:56:48 +08:00
    @qile1 恩,这个我知道,但是数据库操作的地方很多呀,怎么处理比较方便一点,不能在每个地方都写一个 try...except 语句吧...
    lilililili1010
        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
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.