Instance#
#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 anInstancethat produces aPersonobject with anameproperty set to the string"Kermit".kermit.set(favorite_color="green")sets Kermit’sfavorite_colorproperty to the string"green". Property values may also be numbers, dates,datetimeobjects, orNone.favorite_coloris 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 thekermitinstance, although it is not used here.
In the query:
Person()returns anInstancethat producesPersonobjects.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_colorproperty 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.