我希望有人能向我解释如何使用偏移量或光标在应用程序引擎。我使用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的末尾,然后进入下一批?非常感谢!
编辑:我应该提到,我没有访问应用程序引擎环境,这就是为什么我现在有点迷路…(
我没有使用gcloud的任何经验,但我认为这应该不会有太大的不同。
当您查询时,您将使用fetch_page而不是fetch函数。fetch_page函数返回三样东西(结果、游标、更多)。游标是查询的书签,如果可能有更多的结果,则more为真。
处理完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())