sqlalchemy.orm.
mapper
(class_, local_table=None, properties=None, primary_key=None, non_primary=False, inherits=None, inherit_condition=None, inherit_foreign_keys=None, extension=None, order_by=False, always_refresh=False, version_id_col=None, version_id_generator=None, polymorphic_on=None, _polymorphic_map=None, polymorphic_identity=None, concrete=False, with_polymorphic=None, allow_partial_pks=True, batch=True, column_prefix=None, include_properties=None, exclude_properties=None, passive_updates=True, passive_deletes=False, confirm_deleted_rows=True, eager_defaults=False, legacy_is_orphan=False, _compiled_cache_size=100)¶返回一个新的Mapper
对象。
该功能通常通过声明扩展在幕后使用。当使用Declarative时,许多通常的mapper()
参数由Declarative扩展本身处理,包括class_
,local_table
,properties
,inherits
。其他选项使用__mapper_args__
类变量传递给mapper()
:
class MyClass(Base):
__tablename__ = 'my_table'
id = Column(Integer, primary_key=True)
type = Column(String(50))
alt = Column("some_alt", Integer)
__mapper_args__ = {
'polymorphic_on' : type
}
显式使用mapper()
通常被称为经典映射。上面的声明性示例在经典形式上等同于:
my_table = Table("my_table", metadata,
Column('id', Integer, primary_key=True),
Column('type', String(50)),
Column("some_alt", Integer)
)
class MyClass(object):
pass
mapper(MyClass, my_table,
polymorphic_on=my_table.c.type,
properties={
'alt':my_table.c.some_alt
})
也可以看看
Classical Mappings - 讨论直接使用mapper()
参数: |
|
---|
sqlalchemy.orm。 T0> object_mapper T1> ( T2> 实例 T3> ) T4> ¶ T5 >
给定一个对象,返回与对象实例关联的主映射器。
如果未配置映射,则引发sqlalchemy.orm.exc.UnmappedInstanceError
。
该功能可通过检查系统获得:
inspect(instance).mapper
如果实例不是映射的一部分,则使用检查系统将引发sqlalchemy.exc.NoInspectionAvailable
。
sqlalchemy.orm.
class_mapper
(class_, configure=True)¶给定一个类,返回与密钥关联的主要Mapper
。
如果给定类没有配置映射,则引发UnmappedClassError
;如果传递了非类对象,则引发ArgumentError
。
等效功能可通过inspect()
函数使用:
inspect(some_mapped_class)
如果该类未映射,则使用检查系统将引发sqlalchemy.exc.NoInspectionAvailable
。
sqlalchemy.orm。 T0> configure_mappers T1> ( T2> ) T3> ¶ T4>
初始化到目前为止已经构建的所有映射器的映射器间关系。
这个函数可以调用任意次数,但在大多数情况下会自动调用,使用第一次映射,以及每当使用映射和额外尚未配置的映射器已经构建。
出现这种情况的要点包括何时将映射类实例化为实例,以及何时使用Session.query()
方法。
configure_mappers()
函数提供了几个可用于扩充其功能的事件挂钩。这些方法包括:
MapperEvents.before_configured()
- called once before configure_mappers()
does any work; this can be used to establish additional options, properties, or related mappings before the operation proceeds.MapperEvents.mapper_configured()
- called as each indivudal Mapper
is configured within the process; will include all mapper state except for backrefs set up by other mappers that are still to be configured.MapperEvents.after_configured()
- called once after configure_mappers()
is complete; at this stage, all Mapper
objects that are known to SQLAlchemy will be fully configured. 请注意,调用应用程序可能还有其他尚未生成的映射,例如,如果它们尚处于未导入模块中。 sqlalchemy.orm。 T0> clear_mappers T1> ( T2> ) T3> ¶ T4>
从所有类中移除所有映射器。
这个函数从类中移除所有的工具并处理它们相关的映射器。一旦被调用,这些类就会被取消映射,并可以在以后用新的映射器重新映射。
clear_mappers()
is not for normal use, as there is literally no valid usage for it outside of very specific testing scenarios. 通常,映射器是用户定义类的永久性结构组件,并且不会独立于类而丢弃它。如果一个映射类本身被垃圾收集,它的映射器也会自动处理。因此,clear_mappers()
仅用于测试套件中,该测试套件将重复使用具有不同映射的相同类,这本身就是极其罕见的用例 - 唯一的这种用例实际上是SQLAlchemy自己的测试套件以及可能的其他ORM扩展库的测试套件,这些扩展库打算根据固定的一组类来测试映射器构造的各种组合。
sqlalchemy.orm.util.
identity_key
(*args, **kwargs)¶生成“身份密钥”元组,就像在Session.identity_map
字典中用作键一样。
这个函数有几种调用方式:
identity_key(class, ident)
该表单接收映射类和主键标量或元组作为参数。
例如。:
>>> identity_key(MyClass, (1, 2))
(<class '__main__.MyClass'>, (1, 2))
参数类: | 映射类(必须是位置参数) |
---|---|
参数标识: | 主键,可能是标量或元组参数。 |
identity_key(instance=instance)
此表单将为给定实例生成身份密钥。该实例不必是持久性的,只需要填充其主键属性(否则对于那些缺失值,键将包含None
)。
例如。:
>>> instance = MyClass(1, 2)
>>> identity_key(instance=instance)
(<class '__main__.MyClass'>, (1, 2))
在这种形式下,给定实例最终通过Mapper.identity_key_from_instance()
运行,如果对象已过期,将会对相应的行执行数据库检查。
参数实例: | 对象实例(必须作为关键字arg提供) |
---|
identity_key(class, row = row)
除了将一个数据库结果行作为RowProxy
对象传递外,此表单与类/元组表单类似。
例如。:
>>> row = engine.execute("select * from table where a=1 and b=2").first()
>>> identity_key(MyClass, row=row)
(<class '__main__.MyClass'>, (1, 2))
参数类: | 映射类(必须是位置参数) |
---|---|
参数行: | RowProxy row returned by a ResultProxy (must be given as a keyword arg) |
sqlalchemy.orm.util.
polymorphic_union
(table_map, typecolname, aliasname='p_union', cast_nulls=True)¶创建一个由多态映射器使用的UNION
语句。
有关如何使用它的示例,请参阅Concrete Table Inheritance。
参数: |
|
---|
sqlalchemy.orm.mapper.
Mapper
(class_, local_table=None, properties=None, primary_key=None, non_primary=False, inherits=None, inherit_condition=None, inherit_foreign_keys=None, extension=None, order_by=False, always_refresh=False, version_id_col=None, version_id_generator=None, polymorphic_on=None, _polymorphic_map=None, polymorphic_identity=None, concrete=False, with_polymorphic=None, allow_partial_pks=True, batch=True, column_prefix=None, include_properties=None, exclude_properties=None, passive_updates=True, passive_deletes=False, confirm_deleted_rows=True, eager_defaults=False, legacy_is_orphan=False, _compiled_cache_size=100)¶基础:sqlalchemy.orm.base.InspectionAttr
定义类属性与数据库表列的关联。
Mapper
对象使用mapper()
函数实例化。有关实例化新的Mapper
对象的信息,请参阅该函数的文档。
当mapper()
明确用于链接用户定义的类和表元数据时,这被称为经典映射。现代SQLAlchemy用法倾向于支持类配置的sqlalchemy.ext.declarative
扩展,这使得在后台使用mapper()
。
给定一个已知由ORM映射的类,可以使用inspect()
函数获取维护它的Mapper
:
from sqlalchemy import inspect
mapper = inspect(MyClass)
由sqlalchemy.ext.declarative
扩展名映射的类也将通过__mapper__
属性使其映射器可用。
__init__
(class_, local_table=None, properties=None, primary_key=None, non_primary=False, inherits=None, inherit_condition=None, inherit_foreign_keys=None, extension=None, order_by=False, always_refresh=False, version_id_col=None, version_id_generator=None, polymorphic_on=None, _polymorphic_map=None, polymorphic_identity=None, concrete=False, with_polymorphic=None, allow_partial_pks=True, batch=True, column_prefix=None, include_properties=None, exclude_properties=None, passive_updates=True, passive_deletes=False, confirm_deleted_rows=True, eager_defaults=False, legacy_is_orphan=False, _compiled_cache_size=100)¶构建一个新的Mapper
对象。
这个构造函数被镜像为公共API函数;有关完整的用法和参数描述,请参阅mapper()
。
add_properties T0> ( T1> dict_of_properties T2> ) T3> ¶ T4>
使用add_property将给定的属性字典添加到此映射器中。
add_property
(key, prop)¶添加一个单独的MapperProperty到这个映射器。
如果映射器尚未配置,只需将该属性添加到发送给构造函数的初始属性字典中即可。如果这个Mapper已经配置完毕,那么给定的MapperProperty会立即配置。
all_orm_descriptors T0> ¶ T1>
与映射类关联的所有InspectionAttr
属性的名称空间。
这些属性在所有情况下都是与映射类或其超类关联的Python descriptors。
该名称空间包括映射到该类的属性以及由扩展模块声明的属性。它包含从InspectionAttr
继承的任何Python描述符类型。这包括QueryableAttribute
以及扩展类型,例如hybrid_property
,hybrid_method
和AssociationProxy
。
为了区分映射属性和扩展属性,属性InspectionAttr.extension_type
将引用区分不同扩展类型的常量。
在处理QueryableAttribute
时,QueryableAttribute.property
属性指向MapperProperty
属性,这是您在引用映射集合时获得的通过Mapper.attrs
的属性。
警告
Mapper.all_orm_descriptors
访问器名称空间是OrderedProperties
的一个实例。这是一个类似字典的对象,它包含少量的命名方法,如OrderedProperties.items()
和OrderedProperties.values()
。When accessing attributes dynamically, favor using the dict-access scheme, e.g. mapper.all_orm_descriptors[somename]
over getattr(mapper.all_orm_descriptors, somename)
to avoid name collisions.
0.8.0版本中的新功能
也可以看看
ATTRS T0> ¶ T1>
所有MapperProperty
对象的名称空间都与此映射器关联。
这是一个基于其关键名称提供每个属性的对象。例如,具有User.name
属性的User
类的映射器将提供mapper.attrs.name
,它将是ColumnProperty
表示name
列。命名空间对象也可以迭代,这会产生每个MapperProperty
。
Mapper
has several pre-filtered views of this attribute which limit the types of properties returned, inclding synonyms
, column_attrs
, relationships
, and composites
.
警告
Mapper.attrs
访问器名称空间是OrderedProperties
的实例。这是一个类似字典的对象,它包含少量的命名方法,如OrderedProperties.items()
和OrderedProperties.values()
。When accessing attributes dynamically, favor using the dict-access scheme, e.g. mapper.attrs[somename]
over getattr(mapper.attrs, somename)
to avoid name collisions.
base_mapper
=无 ¶继承链中最基本的Mapper
。
在非继承场景中,该属性将始终是Mapper
。在继承场景中,它引用了Mapper
,它是继承链中所有其他Mapper
对象的父对象。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
c
=无 ¶cascade_iterator
(type_, state, halt_on=None)¶迭代对象图中的每个元素及其映射器,以满足给定级联规则的所有关系。
参数: |
|
---|---|
返回: | 该方法产生单独的对象实例。 |
class _
=无 ¶这个Mapper
映射的Python类。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
class_manager
=无 ¶ClassManager
,它为这个Mapper
维护事件侦听器和类绑定描述符。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
column_attrs T0> ¶ T1>
返回由Mapper
维护的所有ColumnProperty
属性的命名空间。
也可以看看
Mapper.attrs
- 所有MapperProperty
对象的命名空间。
列
=无 ¶由Mapper
维护的Column
或其他标量表达式对象的集合。
该集合的行为与任何Table
对象的c
属性的行为相同,区别仅在于此映射中包含的那些列存在,并且基于属性名称在映射中定义,不一定是Column
本身的key
属性。另外,这里还存在由column_property()
映射的标量表达式。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
common_parent T0> ( T1> 其他 T2> ) T3> ¶ T4>
如果给定的映射器与此映射器共享共同的继承父项,则返回true。
复合材料 T0> ¶ T1>
返回由Mapper
维护的所有CompositeProperty
属性的命名空间。
也可以看看
Mapper.attrs
- 所有MapperProperty
对象的命名空间。
具体
=无 ¶如果Mapper
是一个具体的继承映射器,则表示True
。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
已配置
=无 ¶如果已经配置Mapper
,则表示True
。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
也可以看看
实体 T0> ¶ T1>
检查API的一部分。
返回self.class_。
get_property
( key,_configure_mappers = True ) t5 >返回与给定键相关联的MapperProperty。
get_property_by_column T0> ( T1> 列 T2> ) T3> ¶ T4>
给定一个Column
对象,返回映射此列的MapperProperty
。
identity_key_from_instance T0> ( T1> 实例 T2> ) T3> ¶ T4>
根据主键属性返回给定实例的身份关键字。
如果实例的状态已过期,则调用此方法将导致数据库检查以查看该对象是否已被删除。如果该行不再存在,则引发ObjectDeletedError
。
该值通常也可以在属性名称键下的实例状态中找到。
identity_key_from_primary_key T0> ( T1> primary_key T2> ) T3> ¶ T4>
返回身份地图密钥以用于存储/检索身份地图中的项目。
参数: | primary_key ¶ - 指示标识符的值列表。 |
---|
identity_key_from_row
( row,adapter = None ) t5 >返回身份地图密钥,用于从身份地图中存储/检索项目。
参数: | row¶ – A RowProxy instance. The columns which are mapped by this Mapper should be locatable in the row, preferably via the Column object directly (as is the case when a select() construct is executed), or via string names of the form <tablename>_<colname> . |
---|
is_mapper
= True ¶检查API的一部分。
赛 T0> ( T1> 其他 T2> ) T3> ¶ T4>
如果此映射器从给定的映射器继承,则返回True。
iterate_properties T0> ¶ T1>
返回所有MapperProperty对象的迭代器。
local_table
=无 ¶这个Mapper
管理的Selectable
。
“本地”表是Mapper
直接负责从属性访问和刷新角度管理的可选项。对于非继承映射器,本地表与“映射”表相同。对于连接表继承映射器,local_table将是这个Mapper
所代表的整体“连接”的特定子表。如果这个映射器是一个单表继承映射器,local_table将是None
。
也可以看看
mapped_table
=无 ¶Mapper
映射到的Selectable
。
“映射”表是映射器在查询期间选择的可选项。对于非继承映射器,映射表与“本地”表相同。对于连接表继承映射器,mapped_table引用表示此特定子类的完整行的完整Join
。对于单表继承映射器,mapped_table引用基表。
也可以看看
映射器 T0> ¶ T1>
检查API的一部分。
返回自我。
non_primary
=无 ¶如果Mapper
是一个“非主要”映射器,则表示True
。一个仅用于分隔行但不用于持久性管理的映射器。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
polymorphic_identity
=无 ¶表示结果行加载过程中与polymorphic_on
列匹配的标识符。
仅用于继承,此对象可以是任何类型,与polymorphic_on
表示的列的类型相当。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
polymorphic_iterator T0> ( T1> ) T2> ¶ T3>
遍历包含该映射器和所有后代映射器的集合。
这不仅包括立即继承的映射器,还包括它们的所有继承映射器。
要遍历整个层次结构,请使用mapper.base_mapper.polymorphic_iterator()
。
polymorphic_map
=无 ¶在继承场景中映射到Mapper
实例的“多态身份”标识符的映射。
标识符可以是任何类型,与polymorphic_on
表示的列的类型相当。
映射器的继承链将全部引用相同的多态映射对象。该对象用于将传入结果行关联到目标映射器。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
polymorphic_on
=无 ¶在继承方案中,Column
或SQL表达式被指定为该Mapper
的polymorphic_on
参数。
该属性通常是一个Column
实例,但也可能是一个表达式,例如从cast()
派生的表达式。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
primary_key
=无 ¶从Mapper
的角度来看,一个迭代器包含Column
对象的集合,该对象构成映射表的“主键”。
该列表与mapped_table
中的可选列表相反。在继承映射器的情况下,某些列可能由超类映射器管理。例如,对于Join
,主键由Join
引用的所有表中的所有主键列确定。
该列表也不一定与与基础表关联的主键列集合相同; Mapper
具有primary_key
参数,可以覆盖Mapper
认为的主键列。
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
primary_key_from_instance T0> ( T1> 实例 T2> ) T3> ¶ T4>
返回给定实例的主键值列表。
如果实例的状态已过期,则调用此方法将导致数据库检查以查看该对象是否已被删除。如果该行不再存在,则引发ObjectDeletedError
。
primary_mapper T0> ( T1> ) T2> ¶ T3>
返回与此映射器的类关键字(类)相对应的主映射器。
关系 T0> ¶ T1>
由Mapper
维护的所有RelationshipProperty
属性的命名空间。
警告
Mapper.relationships
存取器名称空间是OrderedProperties
的一个实例。这是一个类似字典的对象,它包含少量的命名方法,如OrderedProperties.items()
和OrderedProperties.values()
。When accessing attributes dynamically, favor using the dict-access scheme, e.g. mapper.relationships[somename]
over getattr(mapper.relationships, somename)
to avoid name collisions.
也可以看看
Mapper.attrs
- 所有MapperProperty
对象的命名空间。
可选 T0> ¶ T1>
通常情况下,这相当于mapped_table
,除非使用with_polymorphic
功能,在这种情况下,将返回完整的“多态”选择。
self_and_descendants T0> ¶ T1>
包含这个映射器和所有后代映射器的集合。
这不仅包括立即继承的映射器,还包括它们的所有继承映射器。
单
=无 ¶如果Mapper
是单表继承映射器,则表示True
。
local_table
will be None
if this flag is set.
这是在映射器构建期间确定的只读属性。如果直接修改,行为是未定义的。
同义词 T0> ¶ T1>
返回由Mapper
维护的所有SynonymProperty
属性的名称空间。
也可以看看
Mapper.attrs
- 所有MapperProperty
对象的命名空间。
验证器
=无 ¶使用validates()
装饰器修饰过的属性的不可变字典。
该字典包含字符串属性名称作为映射到实际验证方法的键。
with_polymorphic_mappers T0> ¶ T1>
包含在默认“多态”查询中的Mapper
对象列表。