Если вы посчитаете результаты вашего запроса и число будет равно выборке, у вас будет больше результатов для выборки.Если количество результатов меньше, чем вы получили все результаты запроса.
Чтобы продемонстрировать идею: я использую эту функцию для передачи данных между App Engine и электронной таблицей Google Apps.Перевод осуществляется в страницах;Эта функция пытается оптимизировать размер страницы.args ['Cursor'] удерживает курсор.Первый раз args ['курсор'] = Нет.args ['Page'] содержит размер страницы.Запрос может быть что-то вроде: query = aLotofData.all ()
def makePage(args, proces, query):
if args['Cursor'] != 'NONE' : query.with_cursor(args['Cursor']) # next page with cursor
page = [] # transfer the selected entities in pages
lines = 0 # lines per page counter
fetch = int(args['Page']) # fetch can vary; because we optimize the page transfer
while lines < 0.8 * int(args['Page']) : # optimize pagination when page less than 80% filled
count = 0 # number of entities processed per fetch
for entity in query.fetch(fetch) :
count += 1
page_line = proces(entity)
if page_line :
page.append(page_line) # variable function call to preces the entity
lines += 1
if count < fetch : # no more entities ?
cursor = 'NONE' # last page, no cursor
break
cursor = query.cursor() # save current cursor fot he next run
query.with_cursor(cursor) # set the cursor for the fetch iteration (optimize)
fetch = int(args['Page']) - lines # and fetch the number of page lines left to fill
logging.debug('Transfered : %d next_cursor : %s' %(lines, cursor))
return simplejson.dumps({'cursor' : cursor, 'page' : page})
Функция «обрабатывать» обрабатывает каждую сущность.Когда процесс возвращает None, строка не добавляется к текущей странице.