【问题标题】:Multiple .order() calls using Google App Engine使用 Google App Engine 进行多次 .order() 调用
【发布时间】:2012-02-25 22:17:57
【问题描述】:

在 Google App Engine 中进行查询以获取子集排序时,您能否指定多个 .order() 调用?您可以在 GQL 中执行此操作,因此我假设您可以通过 .order() 调用来执行此操作,但它似乎不起作用。

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

这会将具有相同价值的高分排在最前面。

【问题讨论】:

  • 您能否澄清一下“它似乎不起作用”。你期望得到什么,你会得到什么?
  • 上面的例子被简化了。我会得到一个按“分数”排序的前 10 个分数的列表,然后是在每个“分数”排序中按“提交”排序的分数。因此,如果有两个相同值的分数,最新的将是第一个。如果有 100 个相同值的分数,我会得到最新的 10 个。这预计会奏效吗?如果是,那么我将开始查看代码中的其他地方。
  • 我很确定我一直在我的代码中执行此操作并获得预期的结果。我想知道索引是否不是最新的。数据存储区中已有数据后,您是否添加了相关索引?
  • 顺便说一句,这是生产问题还是 SDK 问题?
  • 我在这里测试过它(1.6.2、Python 2.7、OSX 10.7),它按预期工作。我链接了订单方法,但是,正如 gae123 指出的(并因此启发了我),您的代码也应该可以工作。但是现在我们处于一个奇怪的领域,你在什么平台上运行什么版本的 Python 和 SDK?

标签: python google-app-engine


【解决方案1】:

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多