InstanceProperty.add(other: Any) -> None

Adds a value to a multi-valued property and creates the property if it doesn’t exist. Must be used in a rule or query context.


otherAnyThe value to be added to the property. Acceptable value types include Producer objects, as well as numbers, strings, dates, and datetime objects.




import relationalai as rai

# Create a model named "books" with Author and Book types.
model = rai.Model("books")
Author = model.Type("Author")
Book = model.Type("Book")

# Add authors and books to the model.
with model.rule():
    vonnegut = Author.add(name="Kurt Vonnegut")
    vonnegut.books.add(Book.add(title="Cat's Cradle"))
    asimov = Author.add(name="Isaac Asimov")
    asimov.books.add(Book.add(title="Foundation and Empire"))

# Retrieve titles of books written by Isaac Asimov.
with model.query() as select:
    book = Author(name="Isaac Asimov").books
    response = select(book.title)

# Output:
#                    title
# 0             Foundation
# 1  Foundation and Empire

In the example above, vonnegut.books.add() creates the multi-valued property books for the vonnegut object. In contrast, the property is single-valued as it is defined through Type.add(). Single-valued properties can also be established using Instance.set(). Calling InstanceProperty.add() on a single-valued property raises an Exception:

# Attempt to add a second author name to the book titled "Foundation".
# The author property is single-valued because it is created with Instance.add().
with model.rule():
    Author(name="Isaac Asimov").name.add("Paul French")

# Output:
# Exception: Trying to use a property `name` as both singular and multi-valued

You can add values to multi-valued properties across multiple rules. For instance, the next rule adds another book to Kurt Vonnegut’s books property:

with model.rule():
    author = Author(name="Kurt Vonnegut")

with model.query() as select:
    book = Author(name="Kurt Vonnegut").books
    response = select(book.title)

# Output:
#                  title
# 0         Cat's Cradle
# 1  Slaughterhouse-Five

To add multiple values at once, use the InstanceProperty.extend() method:

with model.rule():
    author = Author.add(name="Frank Herbert")
    author.books.extend([Book.add(title="Dune"), Book.add(title="Dune Messiah")])

See Also#