InstanceProperty.or_()#
#InstanceProperty.or_(other: Any) -> InstanceProperty
Produces a default property value for objects for which the property is not set.
Returns an InstanceProperty that produces the original values, along with the default value other.
Must be used in a rule or query context.
Parameters#
| Name | Type | Description |
|---|---|---|
other | Any | The default property value. Supported types include Producer objects, numbers, strings, dates, and datetime objects. For optimal performance, the type should match the values produced by the InstanceProperty. |
Returns#
An InstanceProperty object.
Example#
Use .or_() to assign a default property value to objects where the property is either unset or set to None:
#import relationalai as rai
# Create a model named "books" with a Book type.
model = rai.Model("books")
Book = model.Type("Book")
# Add some books to the model.
with model.rule():
Book.add(title="Foundation", author="Isaac Asimov")
Book.add(title="Dune", author="Frank Herbert")
Book.add(title="Sir Gowain and the Green Knight") # No author.
# Get the title and publication year of all books.
with model.query() as select:
# Get all book objects.
book = Book()
# Select the title and author properties of the books.
# `.or_()` sets a default value of "Unknown" for books without an author.
response = select(book.title, book.author.or_("Unknown"))
print(response.results)
# Output:
# title author
# 0 Dune Frank Herbert
# 1 Foundation Isaac Asimov
# 2 Sir Gowain and the Green Knight Unknown
Above, book is an Instance that produces Book objects.
book.author.or_("Unknown") returns an InstanceProperty that produces the author’s name
or "Unknown" if the book lacks an author property, such as in “Sir Gawain and the Green Knight.”
Without .or_(), the query outputs None for books lacking an author.
In the resulting pandas DataFrame, None may appear as NaN, depending on the column type:
## Get the title and publication year of all books.
with model.query() as select:
book = Book()
response = select(book.title, book.author) # .or() is not used.
print(response.results)
# Output:
# title author
# 0 Dune Frank Herbert
# 1 Foundation Isaac Asimov
# 2 Sir Gowain and the Green Knight NaN
.or_() also works with multi-valued properties created using .add() or .extend():
## Add genres to the books.
# genres is a multi-valued property because it is created with Instance.extend().
with model.rule():
Book(title="Foundation").genres.extend(["Science Fiction"])
Book(title="Dune").genres.extend(["Science Fiction", "Adventure"])
# Get the genres of all books.
with model.query() as select:
book = Book()
# Select the title and genres properties of the books.
# `.or_()` sets a default value of "Unknown" for books without genres.
response = select(book.title, book.genres.or_("Unknown"))
print(response.results)
# Output:
# title genres
# 0 Dune Adventure
# 1 Dune Science Fiction
# 2 Foundation Science Fiction
# 3 Sir Gowain and the Green Knight Unknown