我可以在不回滚的情况下在 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()
我想知道是否有一种优雅的方法可以在我的代码中引发异常,但不会在我的金字塔 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()