基本的な親子関係を持つモデルのペアがあります。子にはフィールドがありますfoo
。条件に一致する foo を持つ子を持つすべての親オブジェクトを返す SQLAlchemy クエリを作成したいと考えています。これらの親と一緒に、フィルター基準に一致した場合にのみ、子供を返したいと思います。
これらは私のモデルです:
class Parent(Model):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship('Child', backref='parent')
class Child(Model):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
foo = Column(String(128))
parent_id = Column(Integer, ForeignKey('parent.id'), nullable=False)
ここに例があります。私には両親がいるとA
しましょうB
。a1
私には、a2
、b1
、および の子供がいb2
ます。子a1
はfoo = 1
、a2.foo = 2
などを持っています。
「child.foo == 1」のようなクエリを作成して、このデータを取得したい:
[
{
id: 'A',
children: ['a1'],
},
{
id: 'B',
children: ['b1'],
}
]
a2
とb2
は結果に含まれないことに注意してください。
これまでに検討したものの、うまくいかなかった 2 つのアイデア:
子を選択してから、親オブジェクトを構築します。
これを行ったときに、親のフィールドを照会できませんでした。これも必要です。
親を選択してから、一致する親を繰り返し処理し、さらにクエリを実行して一致する子を収集します。
これには、O(n) クエリが必要なように見えますが、これはやりたくありません。