2014-03-04 28 views
0

Im新增sqlalchemy,Im查询对象并删除会话以防止会话保存更改,之后会话中添加具有更改的对象但未刷新或提交。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 

回答

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 
+0

非常感谢你回答,但我可以将机器人放在“transaction.doom()”无处不在,这样做会有一些默认设置 – aeRogelio

+0

如果你需要在整个项目中禁用它,只需在你的'config/app_cfg.py'文件中'base_config.use_transaction_manager = False' – amol