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