29

次の操作を実行しようとしているとき:

for line in blines:
    line.account = get_customer(line.AccountCode)

に値を割り当てようとしているときにエラーが発生しますline.account

DetachedInstanceError: Parent instance <SunLedgerA at 0x16eda4d0> is not bound to a       Session; lazy load operation of attribute 'account' cannot proceed

私は何か間違ったことをしていますか?

4

4 に答える 4

28

「切り離された」とは、に関連付けられていない ORM オブジェクトを扱っていることを意味しますSession。はSessionリレーショナル データベースへのゲートウェイであるため、マップされたオブジェクトの属性を参照するたびに、ORM はデータベースに戻ってその属性の現在の値を取得する必要がある場合があります。一般に、「アタッチされた」オブジェクトのみを操作する必要があります。「デタッチ」は、キャッシュやセッション間でのオブジェクトの移動に使用される一時的な状態です。

Quickie Intro to Object States を参照してから、おそらくそのドキュメントの残りの部分も読んでください ;)。

于 2012-12-23T17:06:23.447 に答える
11

セロリでも同じ問題がありました。関係に追加lazy='subquery'することで私の問題は解決しました。

于 2016-03-04T02:54:22.447 に答える
2

単体テスト時に同じ問題が発生しました。

解決策は、「with」コンテキスト内ですべてを呼び出すことでした。

with self.app.test_client() as c:
    res = c.post('my_url/test', data=XYZ, content_type='application/json')

その後、うまくいきました。

lazy 属性を追加してもうまくいきませんでした。

于 2019-08-09T08:31:22.427 に答える