2

同じテーブルに対して2つの関係があります。1つの関係に要素を追加すると、セッションを送信するまで、これは他の関係に反映されません。関係を強制的に「更新」する方法はありますか?

具体的な例:

class Event(ManagerBase):
    """Defines an event."""

    __tablename__ = 'eventing_events'

    id = Column(Integer, primary_key=True)
    device_id = Column(Integer, ForeignKey(EventingDevice.id), nullable=False)
    device = relation(EventingDevice)
    type_id = Column(Integer, ForeignKey(EventType.id), nullable=False)
    type = relation(EventType)
    datetime = Column(DateTime, nullable=False)
    summary = Column(String(500))

    fields = relation("EventFieldValue",
                      viewonly=True,
                      collection_class=attribute_mapped_collection("field.name"))

class EventFieldValue(ManagerBase):
    """The value of a single field of an event."""

    __tablename__ = 'eventing_event_field_values'

    event_id = Column(Integer, ForeignKey(Event.id), primary_key=True)
    event = relation(Event, backref=backref("field_values",
                                            collection_class=attribute_mapped_collection("field")))
    field_id = Column(Integer, ForeignKey(Field.id), primary_key=True)
    field = relation(Field)
    value = Column(Text)

Eventto EventFieldValuefieldsfield_values(イベントのbackrefを介して)から2つの認識があります。EventFieldValueをに追加すると、セッションをコミットするまでevent.field_values反映されません。event.fields

4

2 に答える 2

2

2つの関係があるため、sqlalchemyはそれぞれに対して要求を行う必要があり、セッションでそれらのキャッシュを共有しません。

アソシエーションプロキシを確認する必要があります。これはまさに必要なもののようです。これらを使用すると、リレーションを1つだけ定義し、その上にプロキシを配置して、リレーション内のものに簡単にアクセスできます。

于 2012-06-26T13:38:59.280 に答える
0

セッションをフラッシュすると、この問題が解決するはずです。すべての新しい状態でセッションを更新しますが、コミットは行いません。オブジェクトをリロードするRefresh/Expireを調べることもできます。

于 2012-06-26T13:38:18.683 に答える