2011-08-30 48 views
0

正如標題所說= FALSE。我想要做的就是在session.add之後從會話中獲取返回ID(自動生成主鍵)。如果我手動提交事務而不使用pyramid_tm,一切正常,但是當我開始使用pyramid_tm時,它似乎忽略了expire_on_commit。有什麼建議麼?會話過期即使expire_on_commit當我使用pyramid_tm

回答

2

它不會忽略expire_on_commit,它只是本次交易未提交你的代碼運行後,直到,所以你需要刷新和刷新。我是這麼做的:

thing = Thing() 
Session.add(thing) 
Session.flush() 
Session.refresh(thing) 
print thing.id 
+0

是的,它現在可以工作,謝謝。雖然你可以在session.flush後擁有你的id,但我認爲你使用session.refresh來確保。 – buhutz

+0

刷新甚至不需要在這裏; SQLAlchemy已經知道這個id沒有被設置,並且在刷新後會自動分配它。 –

+0

注意事務提交不在這裏的一個因素:ID是SQL服務器分配的,所以只可獲得一次INSERT語句已被髮送到服務器。 SQLAlchemy通常會在執行後續查詢時自動執行刷新,但您也可以在需要時通過執行session.flush()來強制執行它,如mattjbray所示。 –

相關問題