AppEngine, преодоление лимита в 1000 элементов на запрос

Google app engine, очень удобная и гибкая платформа, для веб разработки, но к сожалению постоянно приходится думать об ограничениях, налагаемых на процессорное время, объем занимаемой памяти, запросы к хранилищу, тем самым, организовывая нас, заставляя писать более оптимизированный код. С другой стороны, а что если действительно нужно выполнять сложную операцию, или «тяжелый запрос»? Тогда хотелось бы «спрятать», сложности и ограничения app engine внутрь изящного синтаксиса python. В данном случае предлагается использовать питоновые итератиры, для того, что бы прозрачно для пользователя, выбирать неограниченное количество записей из app engine. Хотя, как видно из кода, все-таки некоторые ограничения встроены в класс, в ствойстве _debug_limit.

Вот код итератора:

class QueryIter():

    _limit_fetch = 1000
    _items = None
    _cursor = None
    _debug_limit = 10000

    def __init__(self, query):
        self._query = query
        self._fetchNext()        

    def _fetchNext(self):
        self._items = iter(self._query.fetch(self._limit_fetch))
        self._cursor = self._query.cursor()        

    def __iter__(self):
        return self

    def next(self):
        self._debug_limit -= 1
        if self._debug_limit < = 0:
            raise StopIteration
        else:
            try:
                result = self._items.next()
            except StopIteration, e:
                self._query.with_cursor(self._cursor)
                self._fetchNext()
                result = self._items.next() # raised exception stop the loop
            return result

А вот, пример применения:

query = MyModel.all()
for i in QueryIter(query):
    print i

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.