SQLAlchemy load_only在父模型上

nor*_*tpy 4 python sql orm sqlalchemy

当急切加载子关系时,如何只加载父模型的几列:

如果我只需要模型的title列,这是有效的chapters:

session.query(Book)\
    .options(joinedload('chapters').load_only('title'))
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

session.query(Book.author)\
    .options(joinedload('chapters').load_only('title'))
Run Code Online (Sandbox Code Playgroud)

Query只有基于表达式的实体 - 找不到名为'chapters'的属性.

换句话说,我想在ORM语法中使用这个SQL:

SELECT 
    books.author,
    chapters.title,
FROM 
    books JOIN chapters ON book.id = chapters.book_id
Run Code Online (Sandbox Code Playgroud)

uni*_*rio 7

错误消息表明您只是选择Book.author,而不是实例Book.chapters如果所有它返回的是一个字符串列表(for author)将会去哪里.

你可以这样做:

session.query(Book.author, Chapter.title).select_from(Book).join(Book.chapters)
Run Code Online (Sandbox Code Playgroud)

要么

session.query(Book).options(load_only("author"), joinedload("chapters").load_only("title"))
Run Code Online (Sandbox Code Playgroud)