2013-04-20 55 views
0

假設我使用的是聲明對象如下所示:SqlAlchemy:引用一個對象的綁定會話?

class MyObject(DeclarativeBase): 
    ... 
    other_object_id = Column(Integer, ForeignKey('other_object.id')) 
    other_object = relationship("OtherObject") 
    ... 

想我想有一個方便的方法set_other_object_value,將要修改other_object.value創造OtherObject一個實例,並將其添加到會話,如果必要的話:

def set_other_object_value(self, value): 
    if self.other_object is None: 
     <create instance of OtherObject and associate with the session> 
    self.other_object.value = value 

的問題是:我怎麼能創造OtherObject,並將其與會話相關聯?一個可能等價的問題:是否可以訪問Session的實例,其中MyObject是從MyObject的實例中添加的?

回答

2

使用object_session

from sqlalchemy.orm.session import object_session 
# ... 

def set_other_object_value(self, value): 
    if self.other_object is None: 
     value = OtherObject(...) 
    self.other_object.value = value 
    object_session(self).add(value) 

但如果你有你的關係設置正確,你不需要新的value添加到會話,因爲sqlalchemy將數字出來,並將其保存到數據庫上commit無論如何。

相關問題