2011-10-08 3 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を設定した後、Noneです。フラッシュ/コミットの前にこの関係を新しいオブジェクトに自動ロードする方法はありますか?

答えて

5

最良のオプションは、リレーションシップに直接オブジェクトを割り当て

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

です。 element_idを割り当てると、フラッシュされるまでメモリに格納されます。内部的にはクエリSELECT * FROM ELEMENT WHERE ELEMENT.id = element_idが発行されますが、そのelement_idデータはストアではなく、メモリに格納されます。

したがって、フラッシュしたくない場合はオブジェクトを直接割り当てることをお勧めします。

希望すると、これが役立ちます。

+1

返信いただきありがとうございます。私は今この方法を使用しています。私の関数はelement_idを受け取り、自分で要素を取得してChartオブジェクトに設定します(内部的にフラッシュが行われます)。唯一の方法だと思われます。 – Victor

関連する問題