我希望有人可以向我解释如何在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的结束然后进入下一批?非常感谢!
编辑:
我应该提一下,我无法访问应用引擎环境,这就是为什么我现在有点失落...... :(
答案 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())