App Engine Python - 排序db然后put()索引

时间:2015-04-22 17:46:16

标签: python google-app-engine cron webapp2

在我的应用中,用户可以获得分数,并且他们的详细信息会存储在数据存储区中。当用户登录时,我想在所有用户中显示他们的排名(基本上与他们的最高分有多远)。所以我的解决方案是对用户进行排序'按降序排列的配置文件将索引+ 1放入配置文件模型并在cron中运行它。

然而,cron失败了。任何有关更好方法的帮助或建议都将受到赞赏:

    from google.appengine.ext import db

    def universal_rank(self):
        users = Profile.all().filter('leaderboard =', l.key()).order('-score')
        rank = 0
        for user in users:
            rank = rank + 1
            user.rank = rank

        db.put(users)

我正在使用webapp2

2 个答案:

答案 0 :(得分:0)

我相信您的过滤器查询语法错误。来自文档,

https://docs.djangoproject.com/en/1.8/topics/db/queries/

看起来你需要的是这样的......

thread = threading.Thread(target=threadCode1) thread2 = threading.Thread(target=threadCode2)

或者,实际上,我认为您不需要users = Profile.objects.all().filter('leaderboard =', l.key()).order('-score')一般。

.all()

我对你获得users = Profile.objects.filter('leaderboard =', l.key()).order('-score')的位置也不肯定,但如果你获得所有用户,我认为你可以做到

l.key()

答案 1 :(得分:0)

因此,似乎数据存储区无法批量超过某个限制。所以我把代码更改为如下:

from google.appengine.ext import db

def universal_rank(self):
    users = Profile.all().filter('leaderboard =', l.key()).order('-score')
    rank = 0
    for user in users:
        rank = rank + 1
        user.rank = rank
        user.put()