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

时间:2019-12-02 10:28:44

标签: python sqlalchemy pyramid

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

用例: 输入错误的登录凭据后,我想在User表上增加一些计数器。在计数器超过V值n次之后,我想提出一个例外,该帐户被阻止,无法执行进一步的操作。不幸的是,引发异常回滚整个会话,计数器未正确增加。

1 个答案:

答案 0 :(得分:3)

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

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

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