如何判断返回的游标是否是App Engine中的最后一个游标

10 投票
5 回答
5004 浏览
提问于 2025-04-16 22:51

抱歉,如果我漏掉了什么很明显的东西。

我正在使用光标(cursors)对应用引擎进行连续调用。请问我怎么知道我是否已经到了最后一个光标?我现在的做法是保存最后一个光标,然后测试一下这个光标是否等于当前返回的光标。不过,这样做需要额外调用一次数据存储,可能并不是必要的。

有没有更好的方法呢?

谢谢!

5 个回答

6

因为你提到“最后的游标”,我猜测你是在做某种分页,这意味着你会分批获取结果,并且会设置一个limit(限制)。

在这种情况下,当你返回的结果数量少于你设置的限制时,就说明你已经到了最后一个游标。

limit = 100
results = Entity.all().with_cursor('x').fetch(limit)
if len(results)<limit:
    # then there's no point trying to fetch another batch after this one
19

我觉得用ext.db在一次数据存储调用中实现这个功能是不太可能的,不过用ndb就可以做到。下面是一个例子:

query = Person.query(Person.name == 'Guido')
result, cursor, more = query.fetch_page(10)

如果使用返回的游标会得到更多记录,那么more的值就会是True。这个过程是很聪明的,只需要一次RPC调用就能完成。

5

如果你问的是“这个光标是否已经到达搜索结果的末尾”,那么答案是:不行,除非你把光标抬起来再试一次。如果有更多符合最初搜索条件的内容被添加进来,并且这些内容在逻辑上位于光标“之后”(比如说,按时间戳升序排列的查询),那么重新使用那个保存的光标就可以让你获取到这些新内容。

撰写回答