1

データモデルから必要なものがありますが、何をする必要があるかまだわかりません。これを考えるのに役立つ情報が必要です。

まずは一般的なケース。私は4つのモデルA、B、C、Dを持っています。Aと残りの1対多の関係があります(AはB、C、Dの任意の数を持つことができます)。B、C、D には、後続のそれぞれに対して 1 対多があります (B は任意の数の C を持つことができます)。これにより、さまざまな階層の構築が可能になります。たとえば、A インスタンスは任意の数の B とそれぞれ任意の数の D を持つ任意の数の B を持つことができます。また、A インスタンスは任意の数の D 要素で構成され、B または C が介在しないようにすることもできます。

具体的な用語を使用すると、セクション、フィールド、および要素を持つことができる調査があります。調査は、各フィールドが多数の要素を持つ独自のフィールドを持つセクションで構成されているか、単純に多数の要素を持つ調査または要素のフィールドを持つ調査で構成されます。

したがって、私の主な質問は、介在する B または C がいくつでもある場合に、A に対して D をリストする方法についてです。介在するモデルを介してアクセスするにはどうすればよいですか? 関係が直接的でなくても、D 要素を取得する必要があります。A.Bs.Cs.Ds はデフォルトで sqlalchemy で有効なものではない (私が判断できる) ため、これを行うには「何か」を設定する必要がありますが、現時点ではこの「何か」が何であるかはわかりません.

編集:

リスト内包表記ができる

[x.Ds for x in A.Cs]

これは開始点として機能しますが、ケースバイケースです。介在する関係に関係なく、A に D を返すように設定したいと思います。

そして、必要に応じて D 要素を A に渡すことができる方法を各モデルに組み込んだので、今のところ解決しましたが、最適な解決策ではありません。

4

1 に答える 1

1

Python アソシエーションを介して Ds オブジェクトを取得する代わりに、SQLAlchemy にこれらのオブジェクトのデータベースをクエリするように依頼します。

D モデルに (C、B、A への) 3 つの外部キーがある場合 (これは投稿から推測したことです)、結合を使用するだけで A に関連する D オブジェクトを取得できます。

セクション、フィールド、および要素を含む調査の Ds :

ds1 = session.query(D).join(C, D.c_id == C.id).join(B, C.b_id == B.id).join(A, B.a_id == A.id).filter(A.id = some_a_id).all()

フィールドと要素を含む調査の Ds :

ds2 = session.query(D).join(C, D.c_id == C.id).join(A, C.a_id == A.id).filter(A.id = some_a_id).all()

要素のみの調査の Ds :

ds3 = session.query(D).join(A).filter(A.id = some_a_id).all()

これらのクエリではa_idb_idc_idは、モデルを連鎖させる外部キーの名前です。Andsome_a_idは、関心のあるアンケートの ID です。

介在するモデルがあるかどうかに関係なく、A のすべてのDを知りたい場合は、3 つのリストを一緒に追加するだけです。

すべての D

ds = ds1 + ds2 + ds3
于 2012-09-19T12:28:46.070 に答える