为什么put()在Query中与索引元素一起使用时不起作用?

问题描述:

我有一个问题,如果我直接作为Query的索引成员访问模型类,put()似乎不起作用;但是,当我明确地从Query中提取类时,它似乎工作正常。为什么是这样?为什么put()在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

如果你只想要第一条记录,用'.get()'结束查询。这将直接返回实体而不需要索引。 – Xion

+0

好点 - 谢谢。 –

您指数这样的查询,这一切执行查询每次重新获取相关结果,对其进行解码并将其返回给您。在第二个代码片段中,您修改实体的一个实例,立即丢弃它,然后获取并存储(未修改)第二个副本。

一般来说,您应该避免将索引编入索引 - 请拨打.get().fetch()

出于同样的原因,您应该尽可能避免使用.count(),因为它还需要运行其他查询。如果您只需要一个结果,请致电.get();如果您需要更多,请致电.fetch(),然后计算返回的结果数量。