2012-03-14 73 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語句中刷新到數據庫。