For whatever it's worth, just getting all the keys with a fetch limit of the largest possible value for an integer seems to work. I have approximately 10,000 entities and counting the keys seems to work and not hit a deadline exception.
Cheers! On Sat, Apr 10, 2010 at 7:31 PM, 风笑雪 <[email protected]> wrote: > def count(model, limit): > result = model.count(limit) > if limit > 1000 and result == 1000: > result = len(model.all(keys_only=True).fetch(limit)) > return result > > ---------- > keakon > > > > 2010/4/10 Patrick Twohig <[email protected]>: > > I can't use a cursor, it has to happen in one request. I tried using a > > sharded counter to provide an estimation of ranking, but that has proven > > unsuccessful. > > > > On Thu, Apr 8, 2010 at 11:55 PM, Tim Hoffman <[email protected]> wrote: > >> > >> Hi > >> > >> You will need to use a cursor combined with a keys_only query (for > >> efficiency) and keep > >> resubmitting the cursor until you get all the results. > >> > >> If you plan to do this in appengine process rather than via the > >> remote_api you will probably need to use a chain of tasks > >> to achieve the result if you have a lot of entities. > >> > >> In python it looks something like the following (I don't do any work > >> with java on app engine) > >> > >> def count(query): > >> i = 0 > >> while True: > >> result = query.fetch(1000) > >> i = i + len(result) > >> if len(result) < 1000: > >> break > >> cursor = query.cursor() > >> query.with_cursor(cursor) > >> return i > >> > >> myquery = mymodels.MyModel.all(keys_only=True) > >> > >> x = count(myquery) > >> > >> Hope this helps > >> > >> Rgds > >> > >> T > >> > >> > >> On Apr 9, 7:36 am, Patrick Twohig <[email protected]> wrote: > >> > I'm trying to figure out a way to count entities matching a certain > >> > criteria. I was thinking of doing a key-only query and using > >> > PreparedQuery.countEntities() (Java). However, when I do that, it > >> > always > >> > returns a value no higher than 1000. Is there a way to get an > accurate > >> > count of all entities matching a query without having to do something > >> > like.... > >> > > >> > int count = datastore.prepare( query.setKeysOnly() > >> > ).asList(FetchOptions.Builder.limit(Integer.MAX_VALUE)).size() ? > >> > > >> > Thanks, > >> > Patrick. > >> > > >> > -- > >> > Patrick H. Twohig. > >> > > >> > Namazu Studios > >> > P.O. Box 34161 > >> > San Diego, CA 92163-4161 > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups "Google App Engine" group. > >> > To post to this group, send email to > [email protected]. > >> > To unsubscribe from this group, send email to > >> > [email protected]<google-appengine%[email protected]> > . > >> > For more options, visit this group > >> > athttp://groups.google.com/group/google-appengine?hl=en. > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups > >> "Google App Engine" group. > >> To post to this group, send email to [email protected]. > >> To unsubscribe from this group, send email to > >> [email protected]<google-appengine%[email protected]> > . > >> For more options, visit this group at > >> http://groups.google.com/group/google-appengine?hl=en. > >> > > > > > > > > -- > > Patrick H. Twohig. > > > > Namazu Studios > > P.O. Box 34161 > > San Diego, CA 92163-4161 > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google App Engine" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<google-appengine%[email protected]> > . > > For more options, visit this group at > > http://groups.google.com/group/google-appengine?hl=en. > > > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-appengine%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > > -- Patrick H. Twohig. Namazu Studios P.O. Box 34161 San Diego, CA 92163-4161 -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
