备用类检测

可扩展的类检测。

The sqlalchemy.ext.instrumentation 包提供了一种在 ORM 中使用备用类检测系统的机制。类检测指的是 ORM 如何在类上放置属性来维护数据并跟踪对该数据的更改,以及安装在类上的事件钩子。

注意

此扩展包是为了与其他对象管理包的集成而提供的,这些包已经执行了自己的检测。它并非用于一般用途。

有关如何使用检测扩展的示例,请参阅示例 属性检测.

API 参考

对象名称 描述

ExtendedInstrumentationRegistry

使用额外簿记扩展 InstrumentationFactory,以适应多种类型的类管理器。

instrumentation_finders

一个可扩展的调用序列,它们返回检测实现

INSTRUMENTATION_MANAGER

属性,在映射类上存在时,会选择自定义检测。

InstrumentationFactory

用于创建新 ClassManager 实例的工厂。

InstrumentationManager

用户定义的类检测扩展。

sqlalchemy.ext.instrumentation.INSTRUMENTATION_MANAGER = '__sa_instrumentation_manager__'

属性,在映射类上存在时,会选择自定义检测。

允许类指定一种略微或完全不同的技术来跟踪对映射属性和集合所做的更改。

在给定对象继承层次结构中,只允许一种检测实现。

此属性的值必须是一个可调用对象,并将传递一个类对象。可调用对象必须返回以下之一:

  • 一个 InstrumentationManager 或其子类的实例

  • 一个实现 InstrumentationManager 所有或部分方法的对象(待定)

  • 一个包含可调用对象的字典,实现上述所有或部分方法(待定)

  • 一个 ClassManager 或其子类的实例

导入 sqlalchemy.ext.instrumentation 模块后,SQLAlchemy 检测解析会咨询此属性。如果在全局 instrumentation_finders 列表中安装了自定义查找器,它们可能会选择遵守或不遵守此属性。

class sqlalchemy.orm.instrumentation.InstrumentationFactory

用于创建新 ClassManager 实例的工厂。

类签名

class sqlalchemy.orm.instrumentation.InstrumentationFactory (sqlalchemy.event.registry.EventTarget)

class sqlalchemy.ext.instrumentation.InstrumentationManager

用户定义的类检测扩展。

可以通过子类化 InstrumentationManager 来更改类检测的执行方式。此类是为了与希望完全修改 ORM 检测方法的其他对象管理框架进行集成而存在的,不建议常规使用。有关拦截类检测事件,请参阅 InstrumentationEvents.

此类的 API 应视为半稳定,可能会在新的版本中发生细微变化。

method sqlalchemy.ext.instrumentation.InstrumentationManager.dict_getter(class_)
method sqlalchemy.ext.instrumentation.InstrumentationManager.get_instance_dict(class_, instance)
method sqlalchemy.ext.instrumentation.InstrumentationManager.initialize_instance_dict(class_, instance)
method sqlalchemy.ext.instrumentation.InstrumentationManager.install_descriptor(class_, key, inst)
method sqlalchemy.ext.instrumentation.InstrumentationManager.install_member(class_, key, implementation)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.install_state(class_, instance, state)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.instrument_attribute(class_, key, inst)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.instrument_collection_class(class_, key, collection_class)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.manage(class_, manager)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.manager_getter(class_)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.post_configure_attribute(class_, key, inst)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.remove_state(class_, instance)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.state_getter(class_)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.uninstall_descriptor(class_, key)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.uninstall_member(class_, key)
方法 sqlalchemy.ext.instrumentation.InstrumentationManager.unregister(class_, manager)
sqlalchemy.ext.instrumentation.instrumentation_finders = [<function find_native_user_instrumentation_hook>]

一个可扩展的调用序列,它们返回检测实现

当一个类被注册时,每个可调用对象将传递一个类对象。如果返回 None,则查询序列中的下一个查找器。否则,返回值必须是遵循与 sqlalchemy.ext.instrumentation.INSTRUMENTATION_MANAGER 相同准则的 instrumentation 工厂。

默认情况下,唯一的查找器是 find_native_user_instrumentation_hook,它搜索 INSTRUMENTATION_MANAGER。如果所有查找器都返回 None,则使用标准 ClassManager instrumentation。

sqlalchemy.ext.instrumentation.ExtendedInstrumentationRegistry

使用额外簿记扩展 InstrumentationFactory,以适应多种类型的类管理器。