or_()
işlevinin bilinmeyen sayıda OR sorgu bileşeni olması durumunda faydalı olabilir.
Örneğin, birkaç isteğe bağlı filtreye sahip bir REST hizmeti oluşturduğumuzu varsayalım, bu filtrelerden herhangi biri doğruysa kayıt döndürmelidir. Diğer tarafta, parametre bir istekte tanımlanmadıysa, sorgumuz değişmemelidir. or_()
İşlev olmadan böyle bir şey yapmalıyız:
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))
İle or_()
işleve bunun için tekrar yazılabilir:
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')))