0

App Engine でオフセットやカーソルを使用する方法を誰かが説明してくれることを期待していました。巨大なデータ移行のためにエンティティにリモート アクセスするために使用gcloudしており、100 個のバッチでデータを取得したいと考えています。

これを行うには非常に簡単な方法があると思いますが、ドキュメントではカーソルについてあまり詳しく説明されていません。これが私がこれまでに持っているものです:

client = datastore.Client(dataset_id=projectID)

# retrieve 100 Articles
query = client.query(kind='Article').fetch(100)

for article in query:
  print article

その 100 個のバッチの終わりをマークしてから、次のバッチに移動するにはどうすればよいでしょうか? 本当にありがとう!

編集:

私はアプリ エンジン環境にアクセスできないことを言及しておく必要があります。そのため、現時点では少し迷っています... :(

4

1 に答える 1

1

私は gcloud の経験はありませんが、これはそれほど違いがあるべきではないと思います。

クエリを実行するときは、 fetch関数の代わりにfetch_pageを使用します。fetch_page関数は 3 つのもの (結果、カーソルなど) を返します。カーソルはクエリのブックマークであり、より多くの結果があると思われる場合はmoreが true です。

100 個のエンティティを処理したら、カーソルを urlsafe 形式でリクエスト ハンドラの URI に渡すことができます。そこでは、新しいカーソルからプロセスを続行します。

from google.appengine.datastore.datastore_query import Cursor

class printArticles(webapp2.RequestHandler):
    def post(self):

        query = Client.query()

        #Retrieve the cursor. 
        curs = Cursor(urlsafe=self.request.get('cursor'))

        #fetch_page returns three things
        articles, next_curs, more = query.fetch_page(100, start_cursor=curs)

        #do whatever you need to do
        for article in articles:
            print article

        #If there are more results to fetch
        if more == True and next_curs is not None:

            #then pass along the cursor
            self.redirect("/job_URI?cursor=" + next_curs.urlsafe())
于 2015-08-27T21:38:18.740 に答える