SQLAlchemy:按多个值过滤单个关系属性

sed*_*rek 3 sqlalchemy

假设我有这两个对象,具有一对多关系:

class A(Base):
    ...
    collection = relationship("B")

class B(Base):
    ...
    a_id = Column(Integer, ForeignKey('table_for_a.id'), nullable=False)
    key = Column(String(50), nullable=False)
Run Code Online (Sandbox Code Playgroud)

如何查询 A.collection 中同时包含 B("apple")、B("orange") 和 B("banana") 的 A?

谢谢。

sed*_*rek 5

经过一段时间的挖掘,我发现我可以得到想要的结果,如下所示:

from sqlalchemy import and_

...
session.query(A).filter(
    and_(
        A.collection.any(key="apple"),
        A.collection.any(key="orange"),
        A.collection.any(key="banana")
    )
).all()
Run Code Online (Sandbox Code Playgroud)