2011-07-07 8 views
0

tansaction.commit()と思われるのは、ピラミッドでコミットする必要がある唯一の方法です。paster pshell私はそれがウェブページにサービスを提供ではなく、シェルに良いことだ理解 は、その後、次のSQLAlchemyのMyModel.my_attributeに私が手に呼び出す:pyramind paster pshellのtransaction.commitの後にセッションが終了しないようにする

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

これは起こりませんでした(私はかなり確信しているが、今チェックすることはできません)Pylonsの中に 'ペースターshell'私は'セッションを使用することができます。 commit()は 'DetachedInstanceError'なしでオブジェクトを再び使用します。今私はそれをもう使用することはできませんし、 'transaction.commit()'を使うよう招待されていますし、 'sessionmaker'に' sessionmaker'に 'expire_on_commit'を渡す必要があります。これはsession.maker(extension = ZopeTransactionExtension ()) 'それを変更すると、提供されたページにも反映されます。では、私は何をすることができますか? – neurino

+0

また、 'sessionmaker'に' expire_on_commit = False'を追加しても、 'pshell'では' transaction.commit() 'の後に' DetachedInstanceError'を取得します... sob – neurino

関連する問題