无法理解app引擎中的游标

时间:2012-08-23 23:20:58

标签: python google-app-engine

我正在尝试使用游标在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,我该如何获得该值?我查看了文档,但这个文档很难记录。

2 个答案:

答案 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:
    ...