or_()
OR क्वेरी घटकों की अज्ञात संख्या के मामले में फ़ंक्शन उपयोगी हो सकता है।
उदाहरण के लिए, मान लें कि हम कुछ वैकल्पिक फ़िल्टर के साथ REST सेवा बना रहे हैं, यदि कोई भी फ़िल्टर सही लौटाता है, तो उसे रिकॉर्ड वापस करना चाहिए। दूसरी तरफ, यदि पैरामीटर अनुरोध में परिभाषित नहीं किया गया था, तो हमारी क्वेरी को बदलना नहीं चाहिए। 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))
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))