2012-08-31 38 views
4

我需要將一個對象附加到會話,以便它不會與在db中保留的對象不同。 (更容易用代碼解釋):在sqlalchemy中刷新分離的實體

session.query(type(some_object)).filter_by(id=some_object.id).one() 

有沒有更正確的方法來做到這一點? session.add(some_object)不起作用,因爲具有此ID的實體可能已經附加到此會話,並且object = session.merge(some_object)不適用於我,因爲它將狀態從分離的副本轉換(如果我使object.name ='asdfasdf'這些更改將是合併對象)後掛起

編輯:

我發現了一個有點醜陋的方式少:

some_object = session.merge(some_object) 
session.refresh(some_object) 

但有這樣一個待辦事項這一個電話?

回答

5

我需要以這樣一種方式附加一個對象到會話,它不會與一個持久化在db中的對象不同。 「

」與DB不會有區別「幾乎意味着您正在尋找加載它,因此查詢它。您可能想要考慮該對象可能已經存在於該目標會話中。所以你的方法與查詢(類型(對象))可能是最直接的,雖然你可以使用get()直接擊中主鍵,populate_existing()以保證會話中已經存在的狀態被覆蓋:

session.query(type(some_object)).populate_existing().get(some_object.id) 

以上調用幾乎相同的代碼路徑refresh()。您也可以使用合併/刷新方法,但至少會發出兩個SELECT調用。

+0

謝謝,這正是我一直在尋找的! – Zozz

+0

謝謝你,爲我工作 – jdurango