Python sqlalchemy对象已保存以完成操作
我是sqlalchemy的新手,我查询对象并删除会话以防止会话保存更改,然后在会话中添加对象并进行更改,但不刷新或提交 当控制器结束时,会话保存我的对象,我不希望这样,如果我没有刷新或提交,我希望对象丢失 我的代码:Python sqlalchemy对象已保存以完成操作,python,turbogears2,Python,Turbogears2,我是sqlalchemy的新手,我查询对象并删除会话以防止会话保存更改,然后在会话中添加对象并进行更改,但不刷新或提交 当控制器结束时,会话保存我的对象,我不希望这样,如果我没有刷新或提交,我希望对象丢失 我的代码: object = model.DBSession.query(model.Object).filter_by( field = value ).first() model.DBSession.expunge(object) object.field = gfhggghfg ob
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
您甚至不需要删除该对象,因为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并添加:
非常感谢您的回答,但我不能将transaction.doom放在任何地方,这样做会有一些默认设置如果您需要在整个项目中禁用它,只需在您的config/app\u cfg.py文件中pust base\u config.use\u transaction\u manager=False
base_config.use_transaction_manager = False