假设我有以下表格:
Articles
包含字段article_id
,title
Tags
包含字段tag_id
,name
ArticleTags
包含字段article_id
,tag_id
我希望找到所有具有给定标签的文章。如何在SQLAlchemy中创建这个复杂的连接?
在SQL中它看起来像:
SELECT a.article_id, a.title FROM Articles AS a
JOIN ArticleTags AS at ON a.article_id = at.article_id
JOIN Tags AS t ON at.tag_id = t.tag_id
WHERE t.name = 'tag_name'
我无法弄清楚如何在SQLAlchemy中执行此操作。我只使用ArticleTags
作为“辅助”表,我无法弄清楚如何让它参与JOIN。
有人可以帮忙吗?
谢谢,Boda Cydo。
答案 0 :(得分:8)
假设您正确设置了ForeignKey约束并创建了映射器:
q = Session.query(Articles).filter(Articles.article_id == ArticleTags.article_id).\
filter(ArticleTags.tag_id == Tags.tag_id).\
filter(Tags.name == 'tag_name')
如果您设置了多对多关系,那就更简单了:
q = Session.query(Articles).filter(Articles.tags.any(name = 'tag_name'))
有关博客相关查询的更多示例,请查看here。
如果您使用sql表达式语言,它应该是直接可转换的。