我可以在不回滚的情况下在 python 金字塔中引发异常吗?

Can I raise exception in python pyramid without rollback?

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

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

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

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

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()