1

私はアプリエンジン用のこのPythonコードを持っています:

def queryArticles(status=1, limit=10, **offset):
    query = Article.all().filter('status =', status).order('-modified')
    articles = query.fetch(limit=limit, **offset)
    cursor = query.cursor()
    return articles, cursor

fetch()を使用するとカーソルが戻りますが、run()を使用すると、カーソルに空の文字列が返されます。なんで?

4

2 に答える 2

3

このrun()メソッドは、クエリを実行するために必要な条件をセットアップするだけです (本番環境では、バックグラウンドで RPC 呼び出しを開始します)。クエリがデータ (カーソルまたはその他) の知識を持つためには、クエリを使い果たすことによって結果をフェッチする必要があります。

>>> query = Model.all()
>>> query_iterator = query.run(limit=5)
>>> query.cursor()
''
>>> list(query_iterator) # Exhaust iterator
[<db.Model instance at 0x...>, ...]
>>> query.cursor()
'E-ABAIICG2oMYXByaWdvbmluamE0cgsLEgVNb2RlbBgKDBQ='
于 2012-06-06T13:26:53.700 に答える
1

Query.run()(または単にQueryのインスタンスを反復処理する) は反復子を返します。クエリのカーソルを取得した時点では、何もフェッチを開始していません。あなたのケースでは、カーソルを使用するので、問題ないと思いますfetch()

本当に必要な場合は、これでうまくいくはずです:

def queryArticles(status=1, limit=10, **offset):
    query = Article.all().filter('status =', status).order('-modified')
    articles = query.run(limit=limit, batch_size=limit, **offset)
    articles = articles.next()
    cursor = query.cursor()
    return articles, cursor
于 2012-06-06T13:27:32.193 に答える