我通过entity.put()将一些数据放入数据存储区,然后很快通过.get()从数据存储区读取(获取包含刚刚放置的实体的数据)。
.get()数据是正确的,但通常它的顺序没有意义:
SELECT * FROM entityName
WHERE someThing = 'value'
ORDER BY votes DESC, lastTouchedTimestamp DESC
将返回正确的实体(更新为包含上述.put()中的新数据),但顺序不正确(即投票和/或lastTouchedTimestamp实际上不按顺序)
GAE很新,很抱歉,如果我有一些简单的事情我会忽略。
EDIT / ADDITION:
每个实体都有一个投票整数。 SELECT应该按照投票顺序返回实体,例如:10,8,7,7,1,但有时会返回10,7,8,7,1,例如。
答案 0 :(得分:6)
您所描述的内容是App Engine术语不 a .get()调用,而是查询。正确的.get()调用指定一个键,不受此种族的影响。 (也不是祖先查询。)有关此主题的更多背景信息,请阅读https://developers.google.com/appengine/docs/python/datastore/overview#Datastore_Writes_and_Data_Visibility
您很幸运,您在查询结果中获得了更新的实体 - 这是因为在.put()调用仍然与查询匹配之前存在的实体。您在实体中获得了正确的值,因为按键访问查询结果(提到的@tesdal的投影查询除外);但是你得到了错误的排序,因为排序来自索引。
答案 1 :(得分:4)
App Engine无法保证索引更新时间。
在您的示例中,它表示索引数据为10,7,7,7,1但返回的结果是实际对象(已更新),因此您会注意到排序已关闭,因为您希望其中一个条目为8。
如果你使用projection query,你会看到10,7,7,7,1。