4

カーソルを使用してappengineアプリで結果を取得しようとしていますが、python2.7使用するたびに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

4

2 に答える 2

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()、それが次回ループでカーソルとして使用される方法を確認してください。

于 2012-08-23T23:41:05.877 に答える
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:
    ...
于 2012-08-24T00:13:09.973 に答える