我有一个包含标签的条目模型,因此每个条目都可以包含许多标签。标签是一个带有tag值的模型,它是标签字符串。我试图在标签集上过滤我返回的条目。例如,给定两个标签a和b,我想只返回同时包含标签a和标签b的条目。
现在我有OR,从某种意义上说,我可以返回任何带有a或b的条目,我已经这样做了。
entObjs = Entries.query.join(Entries.tags).filter(Tags.tag.in_(tagList)).all()
tagList是一个字符串列表。如何实现AND,所以我只获得包含所有标签的条目?
答案 0 :(得分:1)
我使用别名表和连接做了类似的事情,
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))