2015-02-05 3 views
0

컨텍스트 : Pyramid, ZopeTransactionExtension을 사용하는 SQLAlchemy 세션, Pyramid 트랜잭션 관리자."커밋 전"후크에서 변경되었거나 아직 플러시되지 않은 객체 목록 얻기

이 문서 (http://zodb.readthedocs.org/en/latest/transactions.html#more-features-and-things-to-keep-in-mind-about-transactions)는 말한다 :

가 어떤 경우에는 트랜잭션이 커밋되기 직전에 일부 코드를 실행하는 것이 바람직 할 수있다 후크

을하기 전에 커밋. 예를 들어 트랜잭션 중에 변경된 모든 객체에서 작업을 수행해야하는 경우 객체가 변경 될 때마다 커밋 할 때 한 번 호출하는 것이 좋을 수 있습니다.

나는 그 (플러시 여부, 변경된 객체의 목록을) 정확히 할 필요가 있지만, 문제는 current_transaction.addBeforeCommitHook() 추가 할 수 있습니다 후크 기능은 프로그래머에 의해 통과만을 인수와 kwargs로 수신 표시입니다 :하지 트랜잭션이 아닌 변경된 오브젝트 목록

Q : 후크 액세스 오브젝트를 얻는 방법 은 플러시되기 전에 현재 트랜잭션에서 변경되었습니다.?

답변

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 
+0

오른쪽으로 session.dirty에 액세스 할 수있는 개체 때문에 변경된 것은 트랜잭션 확장에 매우 한정적이지만 훅은 그렇지 않습니다. 거래에 대해서만 알고 있습니다. 트랜잭션에 모든 확장을 요청하고 SQLAlchemy 세션이있는 트랜잭션을 찾으십시오. –

관련 문제