Python SQLAlchemy加入a";“一对多表”;然后使用一组值对联接表进行筛选
我有一个条目模型,它有标签,所以每个条目都可以有很多标签。标记是一个模型,其值为tag,即标记字符串。我正在尝试筛选标记集上返回的条目。例如,给定两个标记a和b,我只想返回同时包含标记a和标记b的条目 现在我有,或者,在某种意义上,我可以返回任何有a或b的条目,我是这样做的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,以便只获取包含所有标记的
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是一个不错的选择。谢谢你的帮助。