Sqlalchemy はすべての変更を追跡し、これを行うとデータベースにコミットします。
b = this_session.query(BaseUrl).filter_by(id=value).first()
b.basevalue = "new_value" #changing
this_session.commit() #commit the change to the DB
それはうまくいきます。
ただし、これを使用すると:
proxy = this_session.execute("select * from base_url where id = {0}".format(value))
b = create_base_url(proxy) #create an instance of BaseUrl from proxy!
b.basevalue = "new_value" #changing
this_session.commit() #it does NOT commit the change to the DB
もちろん、問題create_base_url()
。この関数では、BaseUrl
から取得したさまざまな引数を渡して のインスタンスを作成し、proxy
それを返すだけです。this_session
オブジェクトのすべての変更を追跡するために、他に何もしません。次のような機能が必要です。
this_session.attach(b) #keep track of changes in b
のすべての変更を追跡するためb
です。
そのような機能をどのように実装すればよいですか? 私が反対を持っていればそれも良いでしょう:
this_session.detach(b) #don't keep track of changes in b
と を使用postgresql 9.2
してsqlalchemy 0.9.0
います。
いくつかのヘルプに加えて、ドキュメント (この問題を扱っているセクション) へのリンクがあれば、詳細を読むことができます。:-)