Instance#
relationalai
#class Instance
Instance
is a subclass of Producer
that
produces model objects in rule and query contexts.
They are created by calling a Type
or the Type.add()
method.
Methods#
In addition to the methods inherited from Producer
, Instance
supports:
Name | Description | Returns |
---|---|---|
.set(*args, **kwargs) | Set a Type or a property on an object. | Instance |
Example#
Instance
objects act as variables representing model objects in rules and queries.
Here’s how to create and manipulate an Instance
:
#import relationalai as rai
# Create a model named "people" with a Person type.
model = rai.Model("people")
Person = model.Type("Person")
# Add a person to the model.
with model.rule():
# Add a person named "Kermit" to the model.
# Person.add() returns an Instance.
kermit = Person.add(name="Kermit")
# Set Kermit's favorite color to "green" using Instance.set().
kermit.set(favorite_color="green")
# Add a person named "Rolf" to the model.
rolf = Person.add(name="Rowlf")
# Set Rolf's favorite color to "brown" using Instance.set().
rolf.set(favorite_color="brown")
with model.query() as select:
# Get all Person objects.
# Person() returns an Instance.
person = Person()
# Filter objects by name.
person.name == "Kermit"
# Select the name and favorite_color properties of the Person objects.
# Properties are accessed as Instance attributes.
response = select(person.favorite_color)
print(response.results)
# Output:
# name favorite_color
# 0 Kermit green
In the above example’s rule:
Person.add(name="Kermit")
returns anInstance
that produces aPerson
object with aname
property set to the string"Kermit"
.kermit.set(favorite_color="green")
sets Kermit’sfavorite_color
property to the string"green"
. Property values may also be numbers, dates,datetime
objects, orNone
.favorite_color
is single-valued, meaning setting it a second time overwrites the previous value. See the.set()
method docs for more information on single- and multi-valued properties. Note thatkermit.set()
returns thekermit
instance, although it is not used here.
In the query:
Person()
returns anInstance
that producesPerson
objects.person.name == "Kermit"
filters the objects produced byPerson()
, letting only those with the name"Kermit"
pass through. Alternatively, you may combine this line with the first asperson = Person(name="Kermit")
.select(person.favorite_color)
selects thefavorite_color
property of the remaining objects.
person.name
and person.favorite_color
return InstanceProperty
objects,
a type of producer that represents object properties.
The ==
operator returns an Expression
,
yet another type of producer that filters objects based on whether or not the expression evaluates to True
.