0

宣言ベース内で、次のような関数を定義します。

def update_me(self):
   if self.raw_info==1: self.changed_info=10
   else: self.changed_info=20

これは Hybrid_property で実行できることはわかっていますが、実際にはもっと複雑な操作を行っています。上記は説明のためのものであり、メソッドを使用して実行する必要があります。セッションオブジェクトを渡さずに、宣言ベース内からこれらの変更をコミットするにはどうすればよいですか? セッションオブジェクトなしでオブジェクトにアクセスしてその値を変更できれば、どうにかしてここに保存できるはずです。もちろん、このコードを上記の関数の最後に追加すると失敗します

self.commit()
4

1 に答える 1

1

あなたのデザインを再考したいと思うかもしれません。ただし、この方法で確実に移動したい場合は、次のobject_session方法を使用できます。

object_session(self).commit()

警告:これはセッション全体(1 つのオブジェクトだけでなく)をコミットし、self既にセッションにアタッチされている場合にのみ機能します(Session.addたとえば、クエリによって、またはクエリされた)。したがって、これは脆弱な操作になるため、どうしても必要な場合を除き、お勧めしません。

しかし、あなたが言うとき、あなたは正しいです

セッションオブジェクトなしでオブジェクトにアクセスしてその値を変更できれば、どうにかしてここに保存できるはずです。

オブジェクトとセッションが接続されているため、変更がデータベースに配信されます。上記の方法でこの接続されたセッションを取得します。

于 2013-09-28T03:44:36.087 に答える