Python 方便地迭代数据存储实体
请教育我如何以正确的方式做这件事,因为我觉得我目前的方式是冗长的 我知道在AppEngine中迭代所有实体并不完全是为了使用它,但有时我想收集关于我的实体的统计数据,例如有多少用户是女性。事实上,标准可能更复杂,但无论如何都需要检查每个实体 下面是一些关于如何在实体上迭代的伪代码: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_
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。