在“提交前”h中获取已更改和尚未刷新的对象的列表

2024-05-13 20:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文:金字塔,SQLAlchemy会话与ZopeTransactionExtension,金字塔事务管理器。你知道吗

这个文件(http://zodb.readthedocs.org/en/latest/transactions.html#more-features-and-things-to-keep-in-mind-about-transactions)说:

提交挂钩之前

在某些情况下,可能需要在提交事务之前执行一些代码。例如,如果需要对事务期间更改的所有对象执行一个操作,则最好在提交时调用一次,而不是每次更改对象时都调用一次,这样可能会降低速度。

我需要准确地做到这一点(获取更改对象的列表,无论是否刷新),但问题是可以由current_transaction.addBeforeCommitHook()添加的钩子函数似乎只接收程序员传递的arg和kwarg:不是更改对象的列表,也不是事务,等等

问:如何在刷新钩子访问对象之前,在当前事务中更改它们?你知道吗


Tags: 文件对象orghttp管理器列表sqlalchemyreadthedocs
2条回答

我解决了这个问题,虽然不是在“before commit”钩子中,而是通过继承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

也许你可以访问会话.脏与get_current_request

相关问题 更多 >