在我的Zope网站上,我已将standard_error_message定制为Python脚本。该脚本区分错误类型并处理NotFound-errors的重定向。为此,它可以毫无问题地访问某些ZSQLMethods。
现在,我想将NotFound-errors登录到mySQL数据库中(是的,我知道它们已记录在Z2.log中),并为此添加了另一个ZSQLMethod。
奇怪的是,当从standard_error_message脚本中调用时,此ZSQLMethod不起作用。当从另一个python脚本调用时,它也起作用(写入数据库),当匿名用户根据http请求调用此另一个脚本时,也是如此。如果从standard_error_message调用,则如果调用不正确,则会引发错误,否则将不会写入数据库(不会记录错误)。
我真的迷失了这个问题...
最佳答案
您遇到交易问题。
Zope将所有请求包装在一个事务中,并且所有外部数据库交互都是tied into that transaction too。
成功处理请求且未引发异常时,将提交此事务,并在发生异常时中止该事务。
出现异常时显示standard_error_message
;并且由于存在异常,您的SQL INSERT将在事务中止时回滚。
您只需要显式地提交SQL事务。在您的SQL方法中添加COMMIT
语句。
关于sql - Zope : standard_error_message: ZSQLMethod not working,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22731769/