У меня есть следующий сценарий:
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)
Что я хотел бы сделать, так это загрузить всех авторов, у которых есть книга, содержащая SQL в названии. то есть
authors = session.query(Author)\
.join(Author.books)\
.filter(Book.title.like('%SQL%')\
.all()
Кажется простым.
Затем я хотел бы перебрать авторов и показать их книги. Я ожидаю, что при доступе к author[0].books будут возвращены ТОЛЬКО книги, в названии которых есть «SQL». Тем не менее, я получаю ВСЕ книги, назначенные этому автору. Фильтр применяется к списку авторов, но не к их книгам, когда я получаю доступ к отношениям.
Как я могу структурировать свой запрос таким образом, чтобы при фильтрации отношений (например, книг) при доступе к этим отношениям фильтрация по-прежнему применялась?