Type.define()#

relationalai
#Type.define(self, **kwargs: tuple[Type, str, str]) -> None

Defines properties for a type based on foreign key relationships to other types.

Parameters#

NameTypeDescription
**kwargstuple[Type, str, str]Keyword arguments where keys are the names of the new properties. Values are tuples representing a foreign key relationship, which include:
  1. The related Type.
  2. The name of the foreign key property.
  3. The name of the property in the related type on which the foreign key relationship is based.

Returns#

None.

Example#

Use Type.define() to associate objects of one type with objects of another type based on a foreign key relationship.

NOTE

.define() creates single-valued properties by default. If you intend to assign multiple objects to a property created using .define(), you must explicitly declare the property as multi-valued using Property.has_many().

For example, an Employee type defined from a Snowflake table might have a department_id property that references Department objects by their id property. You can define a department property for Employee objects that connects them to the related Department objects via the department_id property:

#import relationalai as rai


# =====
# SETUP
# =====

model = rai.Model("EmployeesModel")

# Declare Employee and Department types from Snowflake tables.
Employee = model.Type("Employee", source="<db>.<schema>.employees")
Department = model.Type("Department", source="<db>.<schema>.departments")


# =======
# EXAMPLE
# =======

# Define a property named 'department' for Employee objects that connects them
# to Department with the same id as the employee's department_id.
Employee.define(department=(Department, "department_id", "id"))

# Related department objects can be accessed directly in rules and queries using
# the 'department' property.
with model.query() as select:
    employee = Employee()
    employee.department.name == "Sales"
    response = select(employee.name)

print(response.results)
#     name
# 0  Jim
# 1  Dwight
# 2  Phyllis

See Also#