如果我遗漏了一些非常明显的东西,我道歉。
我正在使用游标连续调用app引擎。如何判断我是否在最后一个光标上?我现在正在做的当前方法是保存最后一个光标然后测试以查看该光标是否等于当前返回的光标。这需要额外调用数据存储区,但这可能是不必要的。
有更好的方法吗?
谢谢!
答案 0 :(得分:19)
我认为在单个数据存储区调用中有一种方法可以使用ext.db执行此操作,但使用ndb是可行的。例如:
query = Person.query(Person.name == 'Guido')
result, cursor, more = query.fetch_page(10)
如果使用返回的游标将产生更多记录,more
将为True
。这是在单个RPC调用中巧妙地完成的。
答案 1 :(得分:6)
由于你说'last cursor',我假设你正在使用游标进行某种分页,这意味着你将使用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
答案 2 :(得分:5)
如果你的意思是“让这个光标点击搜索结果的末尾”,那么不,不是没有选择光标并再次尝试。如果添加的更多实体与原始搜索条件匹配,则它们在逻辑上落在光标之后(例如,按升序时间戳排序的查询),然后重用该保存的光标将允许您检索这些新实体。
答案 3 :(得分:1)
我使用Chris Familoe描述的相同技术,但设置的限制比我希望返回的数量多1。所以,在Chris&#39;例如,我会获取101个实体。 101返回意味着我有另一页至少1开。
recs = db_query.fetch(limit + 1, offset)
# if less records returned than requested, we've reached the end
if len(recs) < limit + 1:
lastpage = True
entries = recs
else:
lastpage = False
entries = recs[:-1]
答案 4 :(得分:0)
我知道这篇文章有点旧,但我一直在寻找解决同样问题的方法。我在这本优秀的书中找到了它:
http://shop.oreilly.com/product/0636920017547.do
以下是提示:
results = query.fetch(RESULTS_FOR_PAGE)
new_cursor = query.cursor()
query.with_cursor(new_cursor)
has_more_results = query.count(1) == 1