2012-05-23 160 views
0

我正在寻找一种方法来查询SQLAlchemy中的一对多关系链。鉴于以下车型(基本是一种声明的基础):SQLAlchemy查询一对多关系链

class Book(Base): 
    id = Column(Integer, primary_key=True) 
    chapters = relationship("Chapter", backref="book") 

class Chapter(Base): 
    id = Column(Integer, primary_key=True) 
    book_id = Column(Integer, ForeignKey(Book.id)) 
    pages = relationship("Page", backref="chapter", lazy="dynamic") 

class Page(Base): 
    id = Column(Integer, primary_key=True) 
    chapter_id = Column(Integer, ForeignKey(Chapter.id)) 

我需要他们正在与(通过章)相关的图书查询页面实体。但是,

Page.query.filter(Page.chapter.book_id == 1) 

在这种情况下不起作用。 Pages的数量非常大(因此在查询章节时参数lazy="dynamic"),并且我不想通过将book_id列添加到Page表中来解除规范化。

回答

1
qry = Page.query.join(Chapter).join(Book).filter(Book.id == 1)