SQLAlchemy连接一个“一对多表”,然后用一组值对连接的表进行过滤

2024-10-03 21:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: 字符串标记模型列表tagtags条目标签
1条回答
网友
1楼 · 发布于 2024-10-03 21:33:32

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

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))

相关问题 更多 >