使用Google App Engine进行多次.order()调用

时间:2012-02-25 22:17:58

标签: python google-app-engine

在Google App Engine中执行查询以获取子集排序时,是否可以指定多个.order()调用?您可以在GQL中执行此操作,因此我假设您可以将其作为.order()调用来执行此操作,但它似乎无法正常工作。

q = Score.all()
q.filter("level = ", level)
q.order("-score")
q.order("-submitted")
scoreList = q.fetch(10)

这会将最高等级的高分数排在最前面。

1 个答案:

答案 0 :(得分:0)

Roger,在您的开发环境中尝试此操作,看看它是否有效:

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext import db


class Score(db.Model):
    level = db.IntegerProperty()
    score = db.IntegerProperty()
    submitted = db.IntegerProperty()


class MainHandler(webapp.RequestHandler):
    def get(self):
        level = 1
        if Score.all().count() == 0:
            Score(level = 1, score = 10, submitted = 10).put()
            Score(level = 1, score = 10, submitted = 11).put()
            Score(level = 1, score = 10, submitted = 12).put()
            Score(level = 1, score = 11, submitted = 10).put()
            Score(level = 1, score = 11, submitted = 20).put()
            Score(level = 1, score = 12, submitted = 10).put()

        q = Score.all().filter("level = ", level).order("-score").order("-submitted")
        score_list = q.fetch(10)
        self.response.out.write([
                (s.level, s.score, s.submitted) for s in score_list ])


def main():
    application = webapp.WSGIApplication([('/', MainHandler)],
                                         debug=True)
    util.run_wsgi_app(application)


if __name__ == '__main__':
    main()