Получение 100 результатов за раз в Google App Engine

Я надеялся, что кто-нибудь сможет объяснить мне, как использовать смещения или курсоры в 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 ответ

У меня нет опыта работы с 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())
Другие вопросы по тегам