0

私はsqlalchemyを初めて使用し、セッションで変更を加えてオブジェクトを追加した後、フラッシュまたはコミットせずにセッション保存の変更を防ぐために、セッションのクエリオブジェクトと消去を行います。

コントローラーが終了すると、セッションはオブジェクトを保存します。それは望ましくありません。フラッシュまたはコミットしなかった場合、オブジェクトが失われることを望みます

私のコード:

object = model.DBSession.query(model.Object).filter_by( field = value ).first()

model.DBSession.expunge(object)

object.field = gfhggghfg
object.field2 = hsjsjsjsjs

model.DBSession.add(object)


#finish controller turbogearsr the session save the change. I have autocommit and autoflush = False
4

1 に答える 1

0

オブジェクトを消去する必要さえありません。TurboGears はトランザクション マネージャーを提供するため、変更をコミットする代わりに、TurboGears が破棄するようにトランザクションを破棄することができます。

import transaction

@expose('mytemplate')
def my_controller(self):
    object = model.DBSession.query(model.Object).filter_by( field = value ).first()
    object.field = 'Hello'

    transaction.doom()  # This will prevent changes to be committed.
    return dict(value=object.field)

プロジェクト全体で無効にするには、次を編集config/app_cfg.pyして追加します。

base_config.use_transaction_manager = False
于 2014-03-05T14:56:00.910 に答える