如果我直接将模型类作为put()
的索引成员访问,我遇到Query
似乎不起作用的问题;但是,当我从Query
显式提取类时,它似乎工作正常。这是为什么?
此代码有效:
class Record:
field = db.StringProperty()
rs = Record.all().filter('name = ', name_str)
if rs.count() == 1:
# assume that we only get one record in return...
r = rs[0]
r.field = some_value
r.put()
并且此代码不会(并且不会引发任何错误)
class Record:
field = db.StringProperty()
rs = Record.all().filter('name = ', name_str)
if rs.count() == 1:
# assume that we only get one record in return...
rs[0].field = some_value
rs[0].put()
答案 0 :(得分:4)
每次索引这样的查询时,它都会重新执行查询,获取相关结果,对其进行解码并将其返回给您。在第二个片段中,您修改实体的一个实例,立即丢弃它,然后获取并存储(未修改)第二个副本。
通常,您应该避免为此类查询编制索引 - 请改为调用.get()
或.fetch()
。
出于同样的原因,您应该尽可能避免使用.count()
,因为它还需要运行另一个查询。如果您只想要一个结果,请致电.get()
;如果您需要更多,请致电.fetch()
,然后计算返回的结果数。