- 参数 -
映射类或实际的Mapper
实例,表示关系的目标。
argument
也可以作为可调用函数传递,它在映射器初始化时计算,并且在使用Declarative时可以作为Python可评估的字符串传递。
- 辅助 -
对于多对多关系,指定中间表,并且通常是Table
的实例。在不常见的情况下,参数也可以被指定为Alias
结构,甚至可以指定为Join
结构。
secondary
也可以作为可映射函数在映射器初始化时进行评估。When using Declarative, it may also be a string argument noting the name of a Table
that is present in the MetaData
collection associated with the parent-mapped Table
.
The secondary
keyword argument is typically applied in the case where the intermediary Table
is not otherwise expressed in any direct class mapping. 如果“辅助”表也被明确地映射到其他地方(例如在Association Object中),应该考虑应用viewonly
标志,以便relationship()
- T0> active_history =假 T1> 通常情况下,简单多对一的历史追踪逻辑只需要知道“新”值就可以执行刷新。该标志可用于使用
attributes.get_history()
的应用程序,该应用程序还需要知道该属性的“上一个”值。 - backref -
indicates the string name of a property to be placed on the related mapper’s class that will handle this relationship in the other direction.其他属性将在配置映射器时自动创建。也可以作为backref()
对象传递以控制新关系的配置。
- back_populates -
一个字符串名称,作用与backref
相同,除了补充属性不是自动创建,而是必须在其他映射器上显式配置。补充属性还应该指示back_populates
到此关系,以确保正常运行。
- bake_queries = True -
当首先调用bake_lazy_loaders()
函数时,使用BakedQuery
缓存来缓存惰性加载中使用的SQL的构造。默认为True,当烘焙查询缓存系统正在使用时,它旨在为每个关系提供“退出”标志。
如果烘焙查询在其他情况下正在使用,则将此标志设置为False可能会减少此relationship()
的ORM内存使用量,或解决在烘焙查询缓存系统中观察到的未解决的稳定性问题。
- cascade -
一个逗号分隔的级联规则列表,确定会话操作应该如何从父级到子级“级联”。这默认为False
,这意味着应该使用默认级联 - 这个默认级联是“save-update, 合并” < / T2>。
The available cascades are save-update
, merge
, expunge
, delete
, delete-orphan
, and refresh-expire
. An additional option, all
indicates shorthand for "save-update, merge, refresh-expire, expunge, delete"
, and is often used as in "all, delete-orphan"
to indicate that related objects should follow along with the parent object in all cases, and be deleted when de-associated.
- cascade_backrefs = True -
一个布尔值,用于指示save-update
级联应该沿着backref截取的赋值事件操作。当设置为False
时,如果通过backref接收事件,则由此关系管理的属性不会将传入的瞬态对象级联到永久父级的会话中。
- collection_class -
一个返回新的列表持有对象的类或可调用对象。将用来代替存储元素的普通列表。
- comparator_factory -
一个扩展RelationshipProperty.Comparator
的类,它为比较操作提供自定义的SQL子句生成。
- distinct_target_key = None -
指示“子查询”渴望加载是否应将DISTINCT关键字应用于最内层的SELECT语句。当作为None
离开时,在目标列不包含目标表的完整主键的情况下,将应用DISTINCT关键字。当设置为True
时,DISTINCT关键字无条件地应用于最内层的SELECT。
当DISTINCT将最内层子查询的性能降低到超出最内层行可能导致的性能时,可能需要将此标志设置为False。
- doc – docstring which will be applied to the resulting descriptor.
- 扩展名 -
一个AttributeExtension
实例或扩展名列表,它们将被放置在放置在该类上的结果描述符的属性侦听器列表中。
- foreign_keys -
在relationship()
对象的primaryjoin
That is, if the primaryjoin
condition of this relationship()
is a.id == b.a_id
, and the values in b.a_id
are required to be present in a.id
, then the “foreign key” column of this relationship()
is b.a_id
.
In normal cases, the foreign_keys
parameter is not required. relationship()
will automatically determine which columns in the primaryjoin
conditition are to be considered “foreign key” columns based on those Column
objects that specify ForeignKey
, or are otherwise listed as referencing columns in a ForeignKeyConstraint
construct. 只有在以下情况下才需要foreign_keys:foreign_keys
relationship()
结构会引发信息错误消息,提示在出现模糊条件时使用foreign_keys
参数。在典型情况下,如果relationship()
不引发任何异常,通常不需要foreign_keys
参数。
foreign_keys
may also be passed as a callable function which is evaluated at mapper initialization time, and may be passed as a Python-evaluable string when using Declarative.
- info -
可选数据字典,将填充到此对象的MapperProperty.info
属性中。
- innerjoin = False -
当True
时,加入的紧急加载将使用内部联接来加入相关表而不是外部联接。此选项的用途通常是性能之一,因为内部联接通常比外部联接执行得更好。
当关系通过使用不可为空的局部外键多对一地引用一个对象时,或者当引用是一对一或集合是一对一的时候,该标志可以设置为True
保证有一个或至少一个条目。
该选项支持与joinedload.innerjoin
相同的“嵌套”和“非嵌入”选项。有关嵌套/未引入行为的详细信息,请参阅该标志。
- join_depth -
当非None
时,指示深度“渴望”加载器应该加入自我引用或循环关系的级别的整数值。该数字表示同一个映射器在特定连接分支的加载条件下应出现多少次。当缺省值为None
时,渴望的加载器在遇到链中已经更高的相同目标映射器时将停止链接。该选项适用于加入和子查询的加载器。
- lazy ='select' -
指定应该如何加载相关项目。默认值是select
。价值观包括:
select
- items should be loaded lazily when the property is first accessed, using a separate SELECT statement, or identity map fetch for simple many-to-one references.immediate
- items should be loaded as the parents are loaded, using a separate SELECT statement, or identity map fetch for simple many-to-one references.joined
- 应该使用JOIN或LEFT OUTER JOIN“加热”与父项相同的查询。连接是否为“外部”取决于innerjoin
参数。subquery
- items should be loaded “eagerly” as the parents are loaded, using one additional SQL statement, which issues a JOIN to a subquery of the original statement, for each collection requested.noload
- 任何时候都不应该发生加载。这是为了支持“只写”属性或以某种特定于应用程序的方式填充的属性。raise
- 不允许延迟加载;访问该属性,如果其值尚未通过预加载加载,则会引发InvalidRequestError
。dynamic
- 该属性将为所有读取操作返回一个预配置的Query
对象,在迭代结果之前,可以对其应用进一步的过滤操作。有关更多详细信息,请参阅Dynamic Relationship Loaders部分。- 真 - “选择”的同义词
- 假 - “加入”的同义词
- 无 - “noload”的同义词
- load_on_pending = False -
指示暂时或挂起的父对象的加载行为。
设置为True
时,会导致lazy-loader为不持久的父对象发出查询,这意味着它从未被刷新过。当禁用自动刷新或暂挂对象已被“附加”到Session
但不属于其暂挂集合的一部分时,这可能对未决对象有效。
当正常使用ORM时,load_on_pending
标志不会改善行为 - 对象引用应该在对象级而不是在外键级构建,以便它们以普通方式存在于flush收益。该标志不适用于一般用途。
- order_by -
指示加载这些项目时应该应用的顺序。order_by
is expected to refer to one of the Column
objects to which the target class is mapped, or the attribute itself bound to the target class which refers to the column.
order_by
也可以作为一个可调用函数传递,该函数在映射器初始化时计算,并且可以在使用Declarative时作为Python可评估字符串传递。
- passive_deletes = False -
指示删除操作期间的加载行为。
True值表示在父级删除操作期间不应加载卸载的子项。通常,当删除父项时,将加载所有子项,以便它们可以标记为已删除,或者将其父项的外键设置为NULL。Marking this flag as True usually implies an ON DELETE rule is in place which will handle updating/deleting child rows on the database side.
另外,如果没有启用删除或删除孤立级联,则将该标志设置为字符串值“all”将禁用子级外键的“空出”。这通常用于数据库端的触发或错误引发场景。请注意,冲突发生后,会话中子对象的外键属性不会更改,因此这是非常特殊的用例设置。
- passive_updates = True -
指示引用的主键值发生更改时要执行的持久性行为,指示引用的外键列也将需要更改其值。
如果为True,则假定在数据库的外键上配置了ON UPDATE CASCADE
数据库将处理UPDATE从源列到相关行的传播。当False时,SQLAlchemy relationship()
结构将尝试发出自己的UPDATE语句来修改相关的目标。但是请注意,SQLAlchemy 不能为多个级联发出UPDATE。另外,在数据库实际上实施参照完整性的情况下,将此标志设置为False是不兼容的,除非这些限制是明确“延迟”的,如果目标后端支持它的话。
强烈建议使用可变主键的应用程序将passive_updates
设置为True,而是使用数据库本身的参照完整性功能来高效完整地处理更改。
- post_update -
这表示该关系应该在INSERT之后或DELETE之前由第二个UPDATE语句处理。目前,它也会在实例更新后发出UPDATE,尽管这在技术上应该得到改进。该标志用于处理保存两个单独行之间的双向依赖关系(即,每行都引用另一行),否则将无法完全插入或删除两行,因为一行存在于另一行之前。当一个特定的映射安排会产生两个相互依赖的行时使用这个标志,例如一个与一组子行有一对多关系的表,还有一个引用单个子行的列在该列表中(即两个表都包含彼此的外键)。如果刷新操作返回检测到“循环依赖”的错误,则这是一个提示,您可能希望使用post_update
来“中断”该循环。
- primaryjoin -
一个将用作此子对象与父对象的主连接的SQL表达式,或者以多对多关系形式表示主对象与关联表的连接。默认情况下,根据父表和子表(或关联表)的外键关系计算此值。
primaryjoin
may also be passed as a callable function which is evaluated at mapper initialization time, and may be passed as a Python-evaluable string when using Declarative.
- remote_side -
用于自我指涉关系,表示构成关系“远程端”的列或列的列表。
relationship.remote_side
也可以作为一个可调用的函数传递,它在映射器初始化时计算,并且在使用Declarative时可以作为Python可评估的字符串传递。
版本0.8中的更改: remote()
注释也可以直接应用于primaryjoin
表达式,该表达式是一个替代的,更具体的描述特定primaryjoin
中的哪些列应被视为“远程”。
- query_class -
将被用作由“动态”关系返回的“appender查询”的基础的Query
子类,即指定lazy="dynamic"
或者使用orm.dynamic_loader()
函数以其他方式构造。
- secondaryjoin -
一个SQL表达式,将用作关联表与子对象的连接。默认情况下,根据关联表和子表的外键关系计算此值。
secondaryjoin
may also be passed as a callable function which is evaluated at mapper initialization time, and may be passed as a Python-evaluable string when using Declarative.
- single_parent -
如果为True,则安装一个验证器,该验证器可以防止对象一次与多个父对象关联。这用于多对一或多对多关系,应该将其视为一对一或一对多关系。它的用法是可选的,除了relationship()
结构是多对一或多对多的,并且还指定了delete-orphan
级联选项。relationship()
结构本身会引发错误,指示何时需要此选项。
- uselist -
指示该属性是否应该作为列表或标量加载的布尔值。在大多数情况下,根据关系的类型和方向,这个值由映射器配置时的relationship()
自动确定 - 一对多形成一个列表,多对一形成一个标量,许多到很多是一个列表。如果通常需要一个标量(如双向一对一关系),则将uselist
设置为False。
uselist
标志在现有relationship()
结构中也可用作只读属性,可用于确定relationship()
>>> User.addresses.property.uselist
True
也可以看看
One To One - Introduction to the “one to one” relationship pattern, which is typically when the uselist
flag is needed.
- viewonly=False – when set to True, the relationship is used only for loading objects, and not for any persistence operation. 指定
viewonly
的relationship()
可以在primaryjoin
条件中使用更广泛的SQL操作,包括使用各种比较运算符以及SQL函数(如cast()
)。The viewonly
flag is also of general use when defining any kind of relationship()
that doesn’t represent the full set of related objects, to prevent modifications of the collection from resulting in persistence operations.