1. ホーム
  2. python

SQLAlchemy、セッションにバインドされていないオブジェクトを取得する

2023-07-22 21:50:46

質問

私はデータベースからオブジェクトのコレクションを取得し、それをデータベースに接続されていない別のプロセスに渡そうとしています。 私のコードは以下のもののように見えますが、私は得ることを続けます。

sqlalchemy.exc.UnboundExecutionError: Instance <MyClass at 0x8db7fec> is not bound to a Session; attribute refresh operation cannot proceed

リストの要素を get_list() というメソッドを呼び出します。

def get_list (obj):
    sesson = Session()
    lst = session.query(MyClass).all()
    session.close()
    return lst

しかし、これを使うと

def get_list_bis (obj)
    session = Session()
    return session.query(MyClass).all()

要素を使用することはできますが、セッションが閉じられていないため、セッションの状態が心配です。

何が足りないのでしょうか?

どのように解決するのですか?

セッションへの問い合わせによって生成されたオブジェクトの束を、セッションのスコープ外でも使えるようにしたい場合、次のようにします。 エクスパンジ を行う必要があります。

最初の関数の例では、行を追加する必要があります。

session.expunge_all()

以前

session.close()

より一般的には、最初の例のようにセッションがすぐには閉じられないとします。おそらくこれは、Web リクエストの全期間にわたってアクティブに保たれるセッションか、そのようなものでしょう。このような場合は expunge_all . より外科的な処理を行いたいでしょう。

for item in lst:
    session.expunge(item)