由于您在此处使用db.Model,因此这是一种方法,您可以通过某些过滤器计算所有实体,这些过滤器可能超过 1000,这是一个硬限制(如果它仍然适用):
FETCH_LIMIT = 1000
def count_model(x=1, y=True, z=3):
model_qry = MyModel.all(keys_only=True)
model_qry.filter('x =', x)
model_qry.filter('y =', y)
model_qry.filter('z =', z)
count = None
total = 0
cursor = None
while count != 0:
if cursor:
count = model_qry.with_cursor(cursor).count()
else:
count = model_qry.count(limit=FETCH_LIMIT)
total += count
cursor = model_qry.cursor()
return total
如果您要在请求中使用上述内容,那么您可能会超时,因此请考虑改用任务队列。
同样正如 FoxyLad 建议的那样,出于性能原因并将上述方法作为定期运行的 cron 作业以使统计信息完美同步,最好将总计运行在单独的实体中。