SQLAlchemy查询一对多关系链

时间:2012-05-23 17:06:22

标签: database sqlalchemy

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

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)

在这种情况下不起作用。页面数量非常大(因此查询章节时为lazy="dynamic"参数),我不希望通过向Page表格添加book_id列来取消规范化。

1 个答案:

答案 0 :(得分:1)

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