查询所有实体的Google App引擎数据存储区

时间:2014-05-10 08:23:25

标签: python google-app-engine app-engine-ndb

鉴于此模型类

class Student(ndb.Model):
   student_id = ndb.IntegerProperty(required=True)
   student_name = ndb.StringProperty(required=True)
   score=ndb.IntegerProperty(required=True)

   def toJSON(self):
        jsonData = {
        "Student Id":str(self.student_id),
        "Name":self.student_name,
        "Score": str(self.score)
        }
        return json.encode(jsonData)

我正在尝试运行查询以返回所有学生姓名,以及JSON格式的每个学生的分数。

我已经对数据存储区运行了查询,并且能够使用

检索有关每个学生的信息
class ViewStudentDetailsHandler(webapp2.RequestHandler):
def get(self):
    student_id=self.request.get('id')
    callback = self.request.get('callback')
    student = Student.get_by_id(student_id)
    if student:
        if (callback):
            self.response.write(callback + '(' + student.toJSON() + ')')
        else:
            self.response.write(student.toJSON())
    else:
        if(callback):
            self.response.write(callback + "(null)")
        else:
            self.response.write("No student with that id")

但不知道如何获得ALL的学生。我读过谷歌给出的examples,但我仍然迷失。我知道这次我需要一个循环,但那是关于我可以提出的所有想法。任何想法都会被贬低。

1 个答案:

答案 0 :(得分:1)

您需要执行查询,并且根据在单个请求中返回所有这些实体的实体数量将不可行或不实用。然后,您需要在查询中使用游标。

您应该阅读ndb文档中的查询部分 - 他们清楚知道需要做什么 - https://developers.google.com/appengine/docs/python/ndb/queries

对所有项目的简单查询,并使用查询的map方法返回您想要的详细信息作为Json记录列表,该查询将调用提供的函数或classmethod。它并不期望实体的方法,这就是为什么我不直接使用toJSON。

def callback(student):
    return student.toJSON())

results = Student.query().map(callback)

您可能需要摆弄toJSON方法,看看运行时的结果。 results可能还需要显式转换为json,因此您可能希望将显式json.encode推迟到运行查询之后。