【问题标题】:Can I raise exception in python pyramid without rollback?我可以在没有回滚的情况下在 python 金字塔中引发异常吗?
【发布时间】:2020-03-26 22:50:21
【问题描述】:

我想知道是否有一种优雅的方法可以在我的代码中引发异常,但不要回滚我的金字塔 python web 应用程序中的整个会话。

用例: 在错误的登录凭据之后,我想在用户表上增加一些计数器。在计数器超过 V 值的 n 次之后,我想提出帐户被阻止并且无法采取进一步行动的异常。不幸的是,引发异常回滚整个会话并且计数器没有正确递增。

【问题讨论】:

    标签: python sqlalchemy pyramid


    【解决方案1】:

    我不会搞砸这些,我宁愿创建一个新会话,进行更新,并提交这个新会话,然后让异常通过。

    创建一个新会话:这在很大程度上取决于您如何组织项目。例如,我有:

    config.registry['dbsession_factory']
    

    然后在请求中可以访问为

    request.registry['dbsession_factory']. 
    

    您将能够通过project/models/__init__.py 之类的方式找到答案。然后你可以按如下方式使用它:

    db = request.registry['dbsession_factory']()
    try:
        db.query(...whatever.i.need...)
    except:
        db.rollback()
    finally:
        db.commit()
    

    【讨论】:

    • 顺便说一句,我完全同意这一点。主 dbsession 应用于“成功”或“主要”工作,如果您要在此之外记录其他数据,则应在单独的会话/事务中完成,无论错误情况如何,您都将提交该会话/事务。
    • 谢谢,你是对的!实际上文档推荐了相同的处理方式。
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2020-07-29
    • 2022-08-19
    • 2010-11-29
    • 2016-10-12
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多