Оператор
or_ может быть полезен в случае неизвестного количества компонентов запроса OR.
Например, давайте предположим, что мы создаем службу REST с несколькими дополнительными фильтрами, которые должны возвращать запись, если какой-либо из фильтров возвращает значение true. С другой стороны, если параметр не был определен в запросе, наш запрос не должен изменяться. Без функции or_ мы должны сделать что-то вроде этого:
query = Book.query
if filter.title and filter.author:
query = query.filter((Book.title.ilike(filter.title))|(Book.author.ilike(filter.author)))
else if filter.title:
query = query.filter(Book.title.ilike(filter.title))
else if filter.author:
query = query.filter(Book.author.ilike(filter.author))
С помощью функции or_ ее можно переписать в:
query = Book.query
not_null_filters = []
if filter.title:
not_null_filters.append(Book.title.ilike(filter.title))
if filter.author:
not_null_filters.append(Book.author.ilike(filter.author))
if len(not_null_filters) > 0:
query = query.filter(or_(*not_null_filters))