备用类检测

可扩展的类检测。

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 的全部或部分的对象 (TODO)

  • 实现上述全部或部分内容的可调用对象字典 (TODO)

  • 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)
method sqlalchemy.ext.instrumentation.InstrumentationManager.install_state(class_, instance, state)
method sqlalchemy.ext.instrumentation.InstrumentationManager.instrument_attribute(class_, key, inst)
method sqlalchemy.ext.instrumentation.InstrumentationManager.instrument_collection_class(class_, key, collection_class)
method sqlalchemy.ext.instrumentation.InstrumentationManager.manage(class_, manager)
method sqlalchemy.ext.instrumentation.InstrumentationManager.manager_getter(class_)
method sqlalchemy.ext.instrumentation.InstrumentationManager.post_configure_attribute(class_, key, inst)
method sqlalchemy.ext.instrumentation.InstrumentationManager.remove_state(class_, instance)
method sqlalchemy.ext.instrumentation.InstrumentationManager.state_getter(class_)
method sqlalchemy.ext.instrumentation.InstrumentationManager.uninstall_descriptor(class_, key)
method sqlalchemy.ext.instrumentation.InstrumentationManager.uninstall_member(class_, key)
method sqlalchemy.ext.instrumentation.InstrumentationManager.unregister(class_, manager)
sqlalchemy.ext.instrumentation.instrumentation_finders = [<function find_native_user_instrumentation_hook>]

可扩展的调用序列,返回检测实现

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

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

class sqlalchemy.ext.instrumentation.ExtendedInstrumentationRegistry

扩展了 InstrumentationFactory,增加了额外的簿记功能,以适应多种类型的类管理器。