Python 光标和带有GAE中的_cursor()

Python 光标和带有GAE中的_cursor(),python,google-app-engine,Python,Google App Engine,我使用cursor()和分页中使用的_cursor()逻辑从gae模型获取记录。但我不知道如何检查数据库中是否没有光标指向的任何其他记录。我在一些迭代中获取这些记录。当我在第一次迭代中获得所需结果时,然后在下一次迭代中,我想检查模型中没有任何记录,但在这个阶段我没有得到任何空/无游标值。请告诉我如何在使用python的google app engine中使用游标执行此检查。不是100%确定,但我过去做的是将最后一个光标与实际光标进行比较,我想我注意到它们是相同的,所以我得出结论,这是最后一个光标

我使用cursor()和分页中使用的_cursor()逻辑从gae模型获取记录。但我不知道如何检查数据库中是否没有光标指向的任何其他记录。我在一些迭代中获取这些记录。当我在第一次迭代中获得所需结果时,然后在下一次迭代中,我想检查模型中没有任何记录,但在这个阶段我没有得到任何空/无游标值。请告诉我如何在使用python的google app engine中使用游标执行此检查。

不是100%确定,但我过去做的是将最后一个光标与实际光标进行比较,我想我注意到它们是相同的,所以我得出结论,这是最后一个光标

如果对查询结果进行计数,并且该数字等于取回值,则需要取回更多的结果。如果结果数少于,则表示您已获取所有查询结果

为了演示这个想法:我使用这个函数在appengine和googleapps电子表格之间传输数据。传输以页为单位完成;此函数尝试优化页面大小。 args['Cursor']按住光标。第一次args['cursor']=None。args['Page']保存页面大小。 查询可以是这样的:query=aLotofData.all()

def makePage(参数、过程、查询):
如果参数['Cursor']!='NONE':查询。使用光标(args['cursor'])#下一页使用光标
page=[]#在页面中传输所选实体
行数=0#每页计数器行数
fetch=int(args['Page'])#fetch可以变化;因为我们优化了页面传输
而行<0.8*int(args['Page']):#当页面填充率小于80%时,优化分页
计数=0#每次提取处理的实体数
对于query.fetch(fetch)中的实体:
计数+=1
页面\行=过程(实体)
如果第页第行:
page.append(page_行)#变量函数调用以处理实体
行数+=1
如果count

函数“proces”处理每个实体。当proces返回None时,该行不会追加到当前页面。

如果您的模型正在扩展ndb,则应使用fetch_page()。如果不扩展NDB,您可能需要考虑更改。它不是完全向后兼容的,但数据不必迁移

from google.appengine.ext.ndb import model

class User(model.Model):
   name = model.StringProperty()

users, cursor, more = User.query(User.name == "Jon").fetch_page(25)

if more: 
    # Do next page logic
    next_users = User.query(User.name == "Jon").fetch_page(25, start_cursor=cursor)

好的,我明白你的意思了。但是,还有其他合适的解决方案吗?不要认为有一种官方的方法来检查在最后一次获取之后是否还会有另一批。“如果你计算查询结果,并且数量与获取的数量相等,那么你将有更多的结果要获取”这是一种相当懒惰的检查,因为如果你按50分页,并且有200个实体,会怎么样?最后一次抓取将是50,您认为您有另一个页面,但没有。您认为最后一次游标查询将导致页面大小的变化是什么?顺便说一下,如果你不得不使用一个小页面zize,这个变化会变得更大。如果你认为有很大的变化,那么选择另一个(智能/优化)页面大小。对不起,我不明白你所说的变化是什么意思。。。你想说什么?对不起我的英语。我是说机会。举个例子:query=AlotOfData.all()对于query.fetch(5000)中的每一个,您都会收到大量结果。但如果这是最后一个游标查询,则结果数介于0和5000之间。这个数字正好是5000的可能性很小。当结果正好是5000时,你必须做另一个查询,结果为零。这就是我所说的。最后一个查询中获取的结果数可能是完整的,这不足以使分页正常工作。很明显,你不在乎这一点,你很好,但这仍然会给你一个误差幅度,我对此不满意。
from google.appengine.ext.ndb import model

class User(model.Model):
   name = model.StringProperty()

users, cursor, more = User.query(User.name == "Jon").fetch_page(25)

if more: 
    # Do next page logic
    next_users = User.query(User.name == "Jon").fetch_page(25, start_cursor=cursor)