为什么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()
答
您指数这样的查询,这一切执行查询每次重新获取相关结果,对其进行解码并将其返回给您。在第二个代码片段中,您修改实体的一个实例,立即丢弃它,然后获取并存储(未修改)第二个副本。
一般来说,您应该避免将索引编入索引 - 请拨打.get()
或.fetch()
。
出于同样的原因,您应该尽可能避免使用.count()
,因为它还需要运行其他查询。如果您只需要一个结果,请致电.get()
;如果您需要更多,请致电.fetch()
,然后计算返回的结果数量。
如果你只想要第一条记录,用'.get()'结束查询。这将直接返回实体而不需要索引。 – Xion
好点 - 谢谢。 –