2011-07-07 49 views
0

似乎tansaction.commit()是我必須在金字塔paster pshell中進行提交的唯一方法。 我知道這是在服務網頁,但在外殼良好,在此之後,旁邊的SQLAlchemy MyModel.my_attribute電話,我得到:在pyramind paster中的transaction.commit之後避免會話過期pshell

DetachedInstanceError: Parent instance <MyModel at 0x9394d0c> is not bound to 
a Session; lazy load operation of attribute 'my_attribute' cannot proceed 

我怎樣才能避免呢?

回答

0

我相信這是由於SQLA會話的expire_on_commit選項。一旦執行了提交,您用舊事務處理的對象必須刷新或合併到新的會話中。問題是,這實際上並不涉及transaction模塊本身。

+1

這並沒有發生(我敢肯定,但現在不能檢查)在塔'貼紙shell'在那裏我可以使用'會議。 commit()'然後再次使用對象而不用'DetachedInstanceError'。現在我不能再使用它了,並且我被邀請使用'transaction.commit()',而且我應該將'expire_on_commit'傳遞給'sessionmaker',它是'models.py'中sessionmaker的一個'sessionmaker(extension = ZopeTransactionExtension ())'並且改變它也會反映在服務頁面上。那麼,我能做什麼(除了不再使用'transaction'外)? – neurino

+0

此外''expire_on_commit = False'到'sessionmaker'不會改變:'pshell'因爲在'transaction.commit()'之後,我得到'DetachedInstanceError' ... sob – neurino