Можно ли отфильтровать содержимое отношений при опросе родительской модели?

У меня две модели, представляющие фильмы и их шоу. Я хотел бы запросить все фильмы, но их отношения show_times должны содержать только те шоу-шоу, которые есть в будущем.

 class PKMovie(db.Model): id = db.Column(db.Integer, primary_key=True) url = db.Column(db.String(255)) show_times = db.relationship('ShowTime') class ShowTime(db.Model): id = db.Column(db.Integer, primary_key=True) date = db.Column(db.Date) pk_movie_id = db.Column(db.Integer, db.ForeignKey('pk_movie.id')) 

Возможно ли повлиять на содержимое отношения при запросе родителя?

One Solution collect form web for “Можно ли отфильтровать содержимое отношений при опросе родительской модели?”

Отношение по умолчанию является простым выражением равенства: Parent.id == ForeignKey.id . Вы не можете изменить содержимое отношений во время запроса *, но вы можете создать другое отношение, которое выбирает только те элементы, которые вы хотите.

 class PKMovie(db.Model): # ... future_show_times = db.relationship( lambda: ShowTime, primaryjoin=lambda: db.and_( PKMovie.id == ShowTime.pk_movie_id, ShowTime.date >= db.func.current_timestamp() ), viewonly=True ) 

Доступ к экземпляру future_show_times будет возвращать только время показа, которое будет в будущем. Вы можете запросить загрузку этих отношений во время запроса, чтобы при обращении к нему не требовался дополнительный запрос к базе данных.

 PKMovie.query.options(db.joinedload(PKMovie.future_show_times)).all() 

См. Документацию по отношениям .


* Технически вы можете изменить отношения во время запроса, как показано в этом ответе . Однако я думаю, что гораздо яснее определить эти другие отношения.

  • Почему мой scoped_session создает объект AttributeError: «Session» не имеет атрибута «удалить»,
  • Создание дерева из самореляционных таблиц в SQLalchemy
  • sqlalchemy CompileError Неиспользуемые имена столбцов при удалении строки из таблицы m2m
  • хранимые процедуры с sqlAlchemy
  • SQLAlchemy create_all () не создает таблицы
  • SQLAlchemy Automap не создает класс для таблиц без первичного ключа
  • Выберите элемент, имеющий максимум из отношения sqlalchemy
  • Обнаружение ссылок на объект SQLAlchemy
  • Sqlalchemy динамически создает таблицу и сопоставленный класс
  • SQLAlchemy - динамически строит фильтр запросов из dict
  • динамическое сопоставление sqlalchemy
  • Python - лучший язык программирования в мире.