2016-09-17 58 views
2

当预先加载一个孩子的关系,我怎么能只加载父模型的几列:SQLAlchemy的LOAD_ONLY对父模型

这工作,如果我只需要chapters模式title列:

session.query(Book)\ 
    .options(joinedload('chapters').load_only('title')) 

但是,这将引发一个错误:

session.query(Book.author)\ 
    .options(joinedload('chapters').load_only('title')) 

Query has only expression-based entities - can't find property named 'chapters'.

换句话说,我婉吨ORM语法这个SQL:

SELECT 
    books.author, 
    chapters.title, 
FROM 
    books JOIN chapters ON book.id = chapters.book_id 

回答

3

该错误消息说,你只是选择Book.author,而不是Book实例。如果chapters全部返回的是字符串列表(对于author),它将在哪里出发。

你可以这样做:

session.query(Book.author, Chapter.title).select_from(Book).join(Book.chapters) 

session.query(Book).options(load_only("author"), joinedload("chapters").load_only("title")) 
+0

非常感谢你。 – norbertpy