什么时候在谷歌应用程序引擎中使用ComputedProperty(ndb)在后端(例如在处理程序中)提供一个明显的优势,而不仅仅是计算,而不涉及数据存储?
我阅读的所有内容似乎都表明它几乎无用,只会减慢查询速度(至少在其他情况下不会执行put操作)。
思想?
我确实看到了这个:
"注意:如果应用程序查询计算值,请使用ComputedProperty。如果您只想在Python代码中使用派生版本,请定义常规方法或使用Python内置的@property。"
但这并没有真正解释任何优势(为什么查询,如果你可以推导?)
答案 0 :(得分:3)
文档在这方面非常清楚,我再次引用它作为参考,Computed Properties部分:
注意:如果应用查询计算值,请使用
ComputedProperty
。如果您只想在Python代码中使用派生版本,请定义常规方法或使用Python内置@property
。
何时使用?当您需要查询某些派生数据时,需要将其写入数据存储区,以便将其编入索引。
首先想到的例子:您已经存储了用户的生日,但也需要按实际年龄进行过滤,添加属性以获取该值可能是最简单,最有效的解决方案:
age = ndb.ComputedProperty(lambda self: calc_age(self.birthday))
当然,您可以使用一个返回年龄的函数,但只有在获得实体后才有用,不能将其用于查询。