上下文:Pyramid,与ZopeTransactionExtension的SQLAlchemy会话,Pyramid事务管理器。
提前挂钩
在某些情况下,可能需要在提交事务之前执行某些代码。例如,如果需要对事务期间更改的所有对象执行操作,则最好在提交时调用一次,而不是每次更改对象时都会这样做,这可能会减慢速度。
我需要做到这一点(获取已更改对象的列表,无论是否刷新),但问题是可以由current_transaction.addBeforeCommitHook()
添加的钩子函数似乎只接收程序员传递的args和kwargs :不是已更改对象的列表,而不是事务等。
问:如何在刷新当前事务之前更改钩子访问对象 ?
答案 0 :(得分:0)
我制定了解决方案,虽然不在“提交前”挂钩,而是继承自ZopeTransactionExtension
:
class ZopeTransactionExtensionWithRequest(ZopeTransactionExtension):
def before_flush(self, session, flush_context, instances):
super(ZopeTransactionExtensionWithRequest, self).before_flush(session, flush_context, instances)
for sqa_inst in session.dirty:
pass
答案 1 :(得分:0)
也许您可以使用get_current_request
访问session.dirty