如何在SQLAlchemy中对三个表进行JOIN,其中一个是另两个表的映射?
假设我有以下几个表:
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
表当作“辅助”表使用,但我不知道怎么把它包含在连接中。
有人能帮忙吗?
谢谢,Boda Cydo。
1 个回答
9
假设你已经正确设置了外键约束,并且创建了映射器:
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'))
关于博客相关查询的更多例子,可以查看 这里。
如果你使用的是SQL表达式语言,那应该很容易转换。