Я пытаюсь применить курсор к своему приложению, однако документ недостаточно ясен для меня. Описание Google для курсора http://code.google.com/appengine/docs/python/datastore/queries.html#Query_Cursors
Позиция курсора определяется как место в списке результатов после возврата последнего результата. Курсор не является относительным положением в списке (это не смещение); это маркер, к которому может перейти хранилище данных при запуске сканирования индекса для получения результатов. Если результаты запроса изменяются между использованиями курсора, запрос замечает только те изменения, которые происходят в результатах после курсора. Если перед позицией курсора для запроса появляется новый результат, он не будет возвращен при извлечении результатов после курсора. Точно так же, если объект больше не является результатом запроса, но появился перед курсором, результаты, которые появляются после курсора, не изменяются. Если последний возвращенный результат удаляется из набора результатов, курсор все еще знает, как найти следующий результат.
Насколько я понимаю, результаты запроса всегда будут возвращаться с порядком по умолчанию (например, __ ключ __). Затем, с указанным курсором, он добавит фильтр для фильтрации всех результатов до этого курсора. Так же, как Google упоминал в прошлом. Это правда?
Пейджинг с ключом __ __ и неуникальным свойством http://code.google.com/appengine/articles/paging.html
Другой вопрос, можно ли использовать курсор с итерацией или задачей? По некоторым причинам эта функция работает некорректно. Обычно он может генерировать «запрос не найден» в процессе итерации.
Это мой пример:
people = Person.all().filter("age > ", 30)
if cursor:
people.with_cursor(cursor)
try:
for person in people: # query not found
cursor = people.cursor()
except DeadlineExceededError:
taskqueue.add(url="/people", params= {"cursor", cursor})