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

Chr*_*row 10 python google-app-engine cursor

如果我遗漏了一些非常明显的东西,我道歉.

我正在使用游标连续调用app引擎.如何判断我是否在最后一个光标上?我现在正在做的当前方法是保存最后一个光标然后测试以查看该光标是否等于当前返回的光标.这需要额外调用数据存储区,这可能是不必要的.

有一个更好的方法吗?

谢谢!

mor*_*aes 19

我不认为在单个数据存储区调用中有一种方法可以使用ext.db,但是使用ndb可以实现.例:

query = Person.query(Person.name == 'Guido')
result, cursor, more = query.fetch_page(10)
Run Code Online (Sandbox Code Playgroud)

如果使用返回的游标将导致更多记录,more将会True.这是在单个RPC调用中巧妙地完成的.

  • @ user103576还有更多.尝试使用ext.db获取11个结果,仅使用10,然后使用光标获取更多.你会跳1个结果.这不是秘密,但"魔术"ndb的作用是使用`batch_size`和`limit`的组合来请求光标.ext.db不会在查询中公开这些选项. (5认同)
  • 它可能不是神奇的,但确实试试NDB.它让我感觉更好,更实用. (3认同)
  • 这似乎并不特别神奇.当你要求10时,所有ndb正在做的是要求11个结果.如果它有11个,那么还有更多.您可以使用ext.db执行相同的操作. (2认同)

Chr*_*loe 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
Run Code Online (Sandbox Code Playgroud)

  • 没错,它只是让'浪费'的查询成为例外,而不是常态. (4认同)
  • 不完美的解决方案.如果您有30条记录且限制为10,则"最后一页"将有10条记录,但如果您使用光标,则结果将为空.因此,如果您的总记录数是限制的倍数,则此逻辑将不适用. (3认同)

Dav*_*ith 5

如果你的意思是"让这个光标到达搜索结果的末尾",那么不,不是没有选择光标并再次尝试.如果添加的更多实体与原始搜索条件匹配,则它们在逻辑上落在光标之后(例如,按升序时间戳排序的查询),然后重用该保存的光标将允许您检索这些新实体.