I have the following scenario:
class Author(Base):
__tablename__ = 'author'
id = Column(Integer, primary_key = True)
name = Column(String)
books = relationship('Books', backref='author')
class Book(Base):
__tablename__ = 'book'
id = Column(Integer, primary_key = True)
title = Column(String)
What I would like to do is load all authors who have a book containing SQL in
the title. i.e.
authors = session.query(Author)
.join(Author.books)
.filter(Book.title.like('%SQL%')
.all()
Seems simple.
What I would then like to do is iterate over the authors and display their
books. I would expect that when accessing authors[0].books, it will return ONLY
books that have 'SQL' in their title. However, I am getting ALL books assigned
to that author. The filter is applied to the list of authors but not their
books when I access the relationship.
How can I structure my query such that if I filter on a relationship (i.e.
books), when I go to access that relationship, the filtering is still applied?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…