Python SQLAlchemy加入a";“一对多表”;然后使用一组值对联接表进行筛选

Python SQLAlchemy加入a";“一对多表”;然后使用一组值对联接表进行筛选,python,sqlalchemy,Python,Sqlalchemy,我有一个条目模型,它有标签,所以每个条目都可以有很多标签。标记是一个模型,其值为tag,即标记字符串。我正在尝试筛选标记集上返回的条目。例如,给定两个标记a和b,我只想返回同时包含标记a和标记b的条目 现在我有,或者,在某种意义上,我可以返回任何有a或b的条目,我是这样做的 entObjs = Entries.query.join(Entries.tags).filter(Tags.tag.in_(tagList)).all() 标记列表是字符串的列表。如何实现AND,以便只获取包含所有标记的

我有一个条目模型,它有标签,所以每个条目都可以有很多标签。标记是一个模型,其值为tag,即标记字符串。我正在尝试筛选标记集上返回的条目。例如,给定两个标记a和b,我只想返回同时包含标记a和标记b的条目

现在我有,或者,在某种意义上,我可以返回任何有a或b的条目,我是这样做的

entObjs = Entries.query.join(Entries.tags).filter(Tags.tag.in_(tagList)).all()

标记列表是字符串的列表。如何实现AND,以便只获取包含所有标记的条目?

我使用别名表和联接做了类似的事情

from sqlalchemy.orm import aliased

def test(self, tags):       
    q = self.session.query(models.Item).\
             join(models.ItemTag).\
             join(models.Tag.\
             filter(models.Tag.name == tags[0])
    i = 0
    for tag in tags[1:]:
        alias1 = aliased(models.Tag)
        alias2 = aliased(models.ItemTag)
        q = q.join(alias2, models.Item.id == alias2.item_id).\
              filter(alias1.id == alias2.tag_id).\
              filter(alias1.name == tag)
        i += 1

    print(str(q))

@哈卡拉,我不知道我能不能做到。我的ItemTag是一个关联表,我无法访问它的字段:original_tag_registration=alchemyDB.table('original_tag_registration',alchemyDB.Column('tag_id',alchemyDB.Integer,alchemyDB.ForeignKey('tagTable.id')),alchemyDB.Column('entry_id',alchemyDB.Integer,alchemyDB.ForeignKey('entries.id'))哇,花了些力气,但我发现table.c.tag_id是一个不错的选择。谢谢你的帮助。