В вашем примере кода отсутствует критическая часть, где LastEvaluatedKey возвращается в запрос как параметр ExclusiveStartKey!Таким образом, вы повторяете тот же запрос в цикле, а не продолжаете, когда предыдущий запрос остановлен.
Например, вот рабочий код (я сгенерировал массив, это не крутой генератор, как вы сделали ;-)):
def full_query(table, **kwargs):
response = table.query(**kwargs)
items = response['Items']
while 'LastEvaluatedKey' in response:
response = table.query(ExclusiveStartKey=response['LastEvaluatedKey'], **kwards)
items.extend(response['Items'])
return items
Теперь вы можете запустить
full_query(Limit=37, KeyConditions={...})
и получить все результаты, полученные партиями по 37.