SQLAlchemy多对多关联表查询:仅获取关联书籍title字段
高效查询关联作者的书籍title字段的实现方式
直接用下面两种方式就能满足需求,既不会冗余字段,也不会加载完整Book对象影响性能:
方式一:子查询过滤(逻辑直观)
先通过子查询拿到所有关联过作者的书籍ID,再精准查询这些ID对应的title字段:
# 子查询获取关联作者的书籍ID集合 book_id_subquery = session.query(distinct(AuthorBook.book_id)).subquery() # 只查询需要的title字段,返回结果列表 target_titles = [title for title, in session.query(Book.title).filter(Book.id.in_(book_id_subquery))]
方式二:JOIN关联+去重
通过关联中间表和书籍表,直接查询title并去重,一步到位:
target_titles = [title for title, in session.query(distinct(Book.title)).join(AuthorBook, Book.id == AuthorBook.book_id)]
核心优势
- 仅查询
title单个字段,不会加载完整的Book实例,减少数据传输量和内存消耗 - 完全不需要修改中间表结构,不用冗余任何字段
- 利用外键索引(
author_book.book_id作为外键通常会自动创建索引),查询效率有保障
内容的提问来源于stack exchange,提问作者avi menashe
相关产品推荐
相关产品推荐

