与GAE NDB中的ComputedProperty相关的读写操作

时间:2014-03-12 11:55:26

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我使用GAE NDB Python 2.7
我的两个型号代码:

class A(ndb.Model): 
    def X(self, value): 
        :: # some statements to return a value 
        return range 
    def Y(self, value): 
        :: # some statements to return a value 
        return range 
    def Z(self, value): 
        :: # some statements to return a value 
        return range 

    property_1 = ndb.IntegerProperty(default=0, indexed=False) 
    property_2 = ndb.IntegerProperty(default=0, indexed=False) 
    property_3 = ndb.IntegerProperty(default=0, indexed=False) 
    property_4 = ndb.IntegerProperty(indexed=False) 
    # Computed values 
    computed_property_1 = ndb.ComputedProperty(lambda e: e.X(e.property_1)) 
    computed_property_2 = ndb.ComputedProperty(lambda e: e.Y(e.property_2)) 
    computed_property_3 = ndb.ComputedProperty(lambda e: e.Z(e.property_3)) 
    date_added = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 
    date_modified = ndb.DateTimeProperty(auto_now=True, indexed=False) 

class B(ndb.Model): 
    property_5 = ndb.IntegerProperty() 
    property_6 = ndb.StructuredProperty(A) 
    date_added = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 
    date_modified = ndb.DateTimeProperty(auto_now=True, indexed=False) 

我的查询代码:

qry_1 = B.query(B.property_5==input_value) # or B.query(B.property_6.computed_property_2==input_value) 
record_list = qry_1.fetch() 

当我对模型B的实体执行上述查询时,是否会执行任何写操作? (特别是对于ComputedProperty和DateTimeProperty(具有“auto_now”)属性)

如果是,它的速率是否限制为每秒1次写入(我认为这是免费应用程序的限制)

如果是,如果我有50个与查询匹配的实体,它是否会在完成查询并返回匹配的实体集(任何估计的查询完成时间)之前首先完成写操作(如上所述)

如果我在B类中替换以下行,则上述答案有任何差异

property_6 = ndb.StructuredProperty(A)  

property_6 = ndb.StructuredProperty(A, repeated=True)  

1 个答案:

答案 0 :(得分:0)

执行查询没有写入操作。这同样适用于StructuredProperty的两个变体。此外,auto_now_addauto_now仅在写入操作期间设置。我不是百分百肯定,但据我了解文档,计算属性也会在写入时更新(我还没有使用它们)。