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 回答