在Google App Engine中一次获取100个结果

时间:2015-08-27 18:00:16

标签: python google-app-engine gcloud-python google-cloud-python

我希望有人可以向我解释如何在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的结束然后进入下一批?非常感谢!

编辑:

我应该提一下,我无法访问应用引擎环境,这就是为什么我现在有点失落...... :(

1 个答案:

答案 0 :(得分:1)

我对gcloud没有任何经验,但我认为这不应该太过分了。

查询时,您将使用 fetch_page 而不是 fetch 功能。 fetch_page 函数返回三项内容(结果,游标,更多)。光标是查询的书签,如果可能有更多结果,则更多为真。

一旦处理了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())