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, 风笑雪 <kea...@gmail.com> 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 <patr...@namazustudios.com>: > > 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 <zutes...@gmail.com> 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 <patr...@namazustudios.com> 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 > google-appeng...@googlegroups.com. > >> > To unsubscribe from this group, send email to > >> > google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> > . > >> > 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 google-appeng...@googlegroups.com. > >> To unsubscribe from this group, send email to > >> google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> > . > >> 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 google-appeng...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> > . > > 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 google-appeng...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine+unsubscr...@googlegroups.com<google-appengine%2bunsubscr...@googlegroups.com> > . > 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 google-appeng...@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.