Python Sqlalchemy找到两个多对多的交集

Python Sqlalchemy找到两个多对多的交集,python,sqlalchemy,Python,Sqlalchemy,我不熟悉使用sqlalchemy,我正在尝试找出如何找到两个多对多关系的交集。鉴于以下布局: MediaPathRelationship = Table( "media_paths", Base.metadata, Column("media_id", Integer, ForeignKey("media.id"), Column("path_id", Integer, ForeignKey("file_path.id"))) ) AssetPathRelationsh

我不熟悉使用sqlalchemy,我正在尝试找出如何找到两个多对多关系的交集。鉴于以下布局:

MediaPathRelationship = Table(
    "media_paths", Base.metadata,
    Column("media_id", Integer, ForeignKey("media.id"),
    Column("path_id", Integer, ForeignKey("file_path.id")))
)

AssetPathRelationship = Table(
    "asset_paths", Base.metadata,
    Column("asset_id", Integer, ForeignKey("asset.id")),
    Column("path_id", Integer, ForeignKey("file_path.id"))
)

class FilePath(Base):
    __tablename__ = "file_path"
    id = Column(Integer, primary_key=True, autoincrement=True)
    path = Column(String, unique=True)


class Media(Base):
    __tablename__ = "media"
    id = Column(Integer, primary_key=True, autoincrement=True)
    files = relationship("FilePath", secondary=MediaPathRelationship)


class Asset(Base):
    __tablename__ = "asset"
    id = Column(Integer, primary_key=True, autoincrement=True)
    paths = relationship("FilePath", secondary=AssetPathRelationship)


ses = Session()
path = FilePath(path="/path/to/something")
ses.add(path)
asset = Asset(paths=[path])
ses.add(asset)
media = Media(files=[path])
ses.add(media)
ses.commit()
如果我有一个资产,我想找到所有包含该资产路径的媒体。那个查询是什么样子的

asset = ses.query(Asset).first()
ses.query(Media).filter_by(Media.files.contains(asset.files))
或者类似的

我想可能有点关联,但不完全相关

编辑:

到目前为止,我想到的最好的:

paths = [p.path for p in asset.paths]
ses.query(Media).filter(Media.files.any(FilePath.path.in_(paths)))
非常接近,请尝试:

ses.query(Media).filter(Media.files.in_(asset.paths))
非常接近,请尝试:

ses.query(Media).filter(Media.files.in_(asset.paths))

当我尝试这样做时,我得到了一个NotImplementedError:in()还不支持关系。对于一个简单的多对一,使用in(),对一组外键值使用,我认为可能我有一个较旧版本的sqlalchemy,但它是1.1.4。所以我有点迷路了。当我尝试这样做的时候,我得到了一个NotImplementedError:in_10;()还不支持关系。对于一个简单的多对一,使用in(),对一组外键值使用,我认为可能我有一个较旧版本的sqlalchemy,但它是1.1.4。所以我有点迷路了。