繁体   English   中英

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

[英]SQLAlchemy join a "one to many table" and then filter on the joined table with a set of values

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

现在我有 OR,从某种意义上说,我可以返回具有 a 或 b 的任何条目,并且我已经这样做了。

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

tagList 是一个字符串列表。 我如何实现 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM