Python 方便地迭代数据存储实体

Python 方便地迭代数据存储实体,python,google-app-engine,Python,Google App Engine,请教育我如何以正确的方式做这件事,因为我觉得我目前的方式是冗长的 我知道在AppEngine中迭代所有实体并不完全是为了使用它,但有时我想收集关于我的实体的统计数据,例如有多少用户是女性。事实上,标准可能更复杂,但无论如何都需要检查每个实体 下面是一些关于如何在实体上迭代的伪代码: def handle_count_female_users(cursor = None, counter = 0): q = User.all() if cursor: q.with_

请教育我如何以正确的方式做这件事,因为我觉得我目前的方式是冗长的

我知道在AppEngine中迭代所有实体并不完全是为了使用它,但有时我想收集关于我的实体的统计数据,例如有多少用户是女性。事实上,标准可能更复杂,但无论如何都需要检查每个实体

下面是一些关于如何在实体上迭代的伪代码:

def handle_count_female_users(cursor = None, counter = 0):
    q = User.all()
    if cursor:
        q.with_cursor(cursor)
    MAX_FETCH = 100
    users = q.fetch(MAX_FETCH)

    count_of_female_users = len(filter(lambda user:user.gender == 'female', users))
    total_count = counter + count_of_female_users

    if len(users) == MAX_FETCH:
        Task(
            url = "/count_female_users",
            params = {
                'counter' : str(total_count),
                'cursor' : q.cursor()
            }
        ).add()
    else:
        # Now finally have the result
        logging.info("We have %s female users in total." % total_count)
我有一个路由代码,可以自动将GET/foo映射到handle\u foo来处理,我觉得这很方便。正如你所看到的,即使这样,我也有很多东西支持循环,与我真正想要完成的几乎没有任何关系

我真正想做的是:

tally_entities(
    entity_class = User,
    filter_criteria = lambda user:user.gender == 'female',
    result = lambda count:logging.info("We have %s female users in total" % count)
)

有没有办法更接近这个理想,或者有没有更好的方法?

听起来像是mapreduce的一个很好的用例:

太棒了,完全忘记了mapreduce。