google-app-engine - standard - google app engine tutorial español
¿Cómo se obtiene un recuento de filas en un modelo de Datastore en Google App Engine? (7)
Necesito obtener un recuento de registros para un modelo en particular en App Engine. ¿Cómo lo hace uno?
Cargué más de 4000 registros en masa, pero modelname.count () solo me muestra 1000.
A partir del release 1.3.6, ya no hay un tope de 1.000 en las consultas de recuento. Por lo tanto, puede hacer lo siguiente para obtener un recuento superior a 1,000:
count = modelname.all(keys_only=True).count()
Esto contará todas sus entidades, lo que podría ser bastante lento si tiene una gran cantidad de entidades. Como resultado, debe considerar llamar a count()
con un límite especificado:
count = modelname.all(keys_only=True).count(some_upper_bound_suitable_for_you)
Deberías usar Estadísticas del Almacén de Datos :
Query query = new Query("__Stat_Kind__");
query.addFilter("kind_name", FilterOperator.EQUAL, kind);
Entity entityStat = datastore.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");
Tenga en cuenta que lo anterior no funciona en el almacén de datos de desarrollo, pero funciona en producción (cuando se publica).
Veo que esta es una publicación anterior, pero estoy agregando una respuesta en beneficio de otros que buscan lo mismo.
En GAE, un recuento siempre hará que visualice los resultados cuando tenga más de 1000 objetos. La forma más sencilla de resolver este problema es agregar una propiedad de contador a su modelo o una tabla de contadores diferente y actualizarla cada vez que cree un objeto nuevo.
Este es un hilo muy antiguo, pero por si ayuda a otras personas que lo miran, hay 3 formas de lograrlo:
- Accediendo a las estadísticas de Datastore
- Mantener un contador en el almacén de datos
- Contadores de Sharding
Cada uno de estos métodos se explica en este enlace .
Todavía alcanzo el límite de 1000 con la cuenta, adapté el código de Dar (el mío es un poco rápido y sucio):
class GetCount(webapp.RequestHandler):
def get(self):
query = modelname.all(keys_only=True)
i = 0
while True:
result = query.fetch(1000)
i = i + len(result)
if len(result) < 1000:
break
cursor = query.cursor()
query.with_cursor(cursor)
self.response.out.write(''<p>Count: ''+str(i)+''</p>'')
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("__Stat_Kind__");
Query.Filter eqf = new Query.FilterPredicate("kind_name",
Query.FilterOperator.EQUAL,
"SomeEntity");
query.setFilter(eqf);
Entity entityStat = ds.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");
count = modelname.all(keys_only=True).count(some_upper_limit)
Solo para agregar a la publicación anterior de dar, este ''some_upper_limit'' tiene que ser especificado. De lo contrario, el recuento predeterminado seguirá siendo un máximo de 1000.