2011-10-08 47 views
5

我有一個類:Python/SQLAlchemy - 外鍵更新時的加載關係?

class Chart(Base): 
    __tablename__ = 'chart' 
    id = C('chart_id', Integer, primary_key=True) 
    element_id = C(Integer, ForeignKey('element.element_id')) 
    element = relationship(Element) 
    name = C(String) 

    def __init__(self, name): 
     self.name = name 

用法是很常見的,

chart = Chart('Some name') 
chart.element_id = element_id 

但chart.element是無設置element_id後。有什麼辦法在flush/commit之前自動加載這個新對象的關係?

回答

5

最好的辦法是

chart = Chart('Some name') 
chart.element = element 

分配直接對象關係模型。如果你被分配element_id,那麼直到它刷新它將在內存中。在內部它會觸發一個查詢SELECT * FROM ELEMENT WHERE ELEMENT.id = element_id,但該element_id數據不存儲或它將在內存中。

所以我建議直接分配對象,如果你不想沖洗。

希望這會幫助你。

+1

感謝您的迴應。我現在正在使用這種方式。我的函數接收element_id,並且我自己獲取元素以將其設置在Chart對象中(flush在內部完成)。它看起來是唯一的方法。 – Victor