2012-03-14 100 views
4

SQLAlchemy's tutorial,它提到了“仪器”,但似乎并没有正确地定义什么是仪表:什么是SQLAlchemy上下文中的“instrumentation”?

这些类属性像Python描述符存在,并定义 仪器为被映射的类。此仪器的功能包括能够触发更改事件,跟踪修改,并在需要时自动从数据库加载新数据。

这种情况下的仪表是什么?

+0

询问关于仪器事件的相同问题http://docs.sqlalchemy.org/en/rel_0_9/orm/events.html#module-sqlalchemy.orm.instrumentation,但由于关键字非常通用,因此使用Google搜索没有得到有用的结果。感谢您提出这个问题! – Devy 2016-04-19 18:25:39

回答

6

仪器是属性附加到一类,它们作为Python Descriptors实现(这链路在该句子中提到)的过程,使得任何属性获取,设置或删除操作,即:

# __get__ 
print myobject.someattribute 

# __set__ 
myobject.someattribute = "foo" 

# __del__ 
del myoject.someattribute 

...将为每个事件调用Python代码,而不是使用Python直接访问/操作myobject.__dict__的默认行为。 SQLAlchemy利用这些钩子来提供诸如lazy loading之类的行为,并记录属性值何时更改,以实现unit of work模式,其中只有那些已更改的元素将滚动到要发送的UPDATE语句中刷新到数据库。