我正在尝试使用游标在python2.7
appengine app中获取结果,但每次使用with_cursor()
时,它都会获取相同的结果集。
query = Model.all().filter("profile =", p_key).order('-created')
if r.get('cursor'):
query = query.with_cursor(start_cursor = r.get('cursor'))
cursor = query.cursor()
objs = query.fetch(limit=10)
count = len(objs)
for obj in objs:
...
每次通过我都得到相同的10个结果。我认为它与使用end_cursor
有关,但如果query.cursor()
返回start_cursor
,我该如何获得该值?我查看了文档,但这个文档很难记录。
答案 0 :(得分:4)
顺便说一句,你的格式有点棘手。查看你的代码(这是不完整的,因此可能会留下一些东西。)我必须假设你在获取结果后忘记存储光标(或返回给用户 - 我假设r是请求?)。
因此,在获取了一些数据之后,您需要在查询上调用cursor()。例如,此函数使用游标计算所有实体。
def count_entities(kind):
c = None
count = 0
q = kind.all(keys_only=True)
while True:
if c:
q.with_cursor(c)
i = q.fetch(1000)
count = count + len(i)
if not i:
break
c = q.cursor()
return count
了解fetch()在调用c=q.cursor()
之后是如何调用的,并在下次循环时将其用作光标。
答案 1 :(得分:2)
这是最终奏效的内容:
query = Model.all().filter("profile =", p_key).order('-created')
if request.get('cursor'):
query = query.with_cursor(request.get('cursor'))
objs = query.fetch(limit=10)
cursor = query.cursor()
for obj in objs:
...