2014-03-04 38 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