or_()
Hàm có thể hữu ích trong trường hợp không biết số lượng thành phần truy vấn OR.
Ví dụ: giả sử rằng chúng tôi đang tạo một dịch vụ REST với một vài bộ lọc tùy chọn, sẽ trả về bản ghi nếu bất kỳ bộ lọc nào trả về đúng. Mặt khác, nếu tham số không được xác định trong yêu cầu, truy vấn của chúng tôi không nên thay đổi. Không có or_()
chức năng, chúng ta phải làm một cái gì đó như thế này:
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))
Với or_()
chức năng, nó có thể được viết lại thành:
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')))