or_()
A função pode ser útil em caso de número desconhecido de componentes de consulta OR.
Por exemplo, suponha que estamos criando um serviço REST com poucos filtros opcionais, que devem retornar registro se algum dos filtros retornar verdadeiro. Por outro lado, se o parâmetro não foi definido em uma solicitação, nossa consulta não deve mudar. Sem or_()
função, devemos fazer algo assim:
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))
Com a or_()
função, pode ser reescrita para:
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))
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))