The offset is applied _after_ the query is executed and the entities
are fetched. Re-read the "Executing the Query and Accessing Results"
section from
http://code.google.com/appengine/docs/datastore/creatinggettinganddeletingdata.html
So, using offset to go through all your entities is not a good idea.
You should use a __key__ query instead. Read the "Queries on Keys"
section from
http://code.google.com/appengine/docs/datastore/queriesandindexes.html
for details, it even has a complete code sample.
Hope this helps.
Cheers,
Alex
--
www.muspy.com
On Jan 12, 4:12 am, wsstefan wrote:
> I wrote a cronjob that goes through and recalculates my members' ranks
> 10 at a time using the the following request:
>
> profiles = Profile.all().order('-score').fetch(10, offset)
>
> for profile in profiles:
> # calculate rank
>
> but once I get to an offset of more than 4000 I get this:
>
> BadRequestError: offset may not be above 4000
>
> Google Team: Why is this limit applied? Otherwise I have to
> construct a seemingly less efficient query like this:
>
> mod_rank = int(offset % interval)
> profiles = Profile.all().filter('score <', rank_score).order('-
> score').fetch(10, mod_rank)
> if offset % interval == 0:
> memcache.set('rank_score', profile.score)
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---