我正在使用Python和GAE,我正在尝试创建一个字典,其中键是userid,值是'Student'对象。但是,我的字典值是None而不是student对象。
{'60': , '59': }
如果有人能指出我正确的方向,我真的很感激!
Student.py
class Student:
def __init__(self, name, s_id, rew = {}):
self.name = name.strip()
self.rewards = {"Creativity": 0, "Helping Others":0, "Participation":0, "Insight":0}
self.totalRewardPoints = 0
self.s_id = s_id
Main.py(我只包含相关代码)
class PageHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def initialize(self, *a, **kw):
webapp2.RequestHandler.initialize(self, *a, **kw)
def create_students(self):
user = db.GqlQuery("SELECT * FROM User WHERE position='student'")
for u in user:
temp_id = str(u.key().id())
self.students[temp_id] = student.Student(u.name, temp_id)
class MainPage(PageHandler):
students = {}
def get(self):
user = db.GqlQuery("SELECT * FROM User WHERE position='student'")
for u in user:
temp_id = str(u.key().id())
self.students[temp_id] = student.Student(u.name, temp_id)
self.write(self.students)
app = webapp2.WSGIApplication([('/', MainPage)], debug=True)
答案 0 :(得分:2)
对于初学者,Student类需要从实现appengine数据存储持久性的某个模型类继承。如果您使用的是原始数据存储api,则使用db.Model,如果是ndb则使用nbd.Model。
其次,您没有展示如何将(put())学生实体写入数据存储区。根据您不是从(db或ndb)继承的事实,您不太可能将任何内容保存到数据存储区。
除非您不包含实际代码。如果您使用db.Model作为基类,那么您的奖励字段将不起作用。您应该将ndb视为备用起点并使用结构化属性。
您可能需要通过查看文档https://developers.google.com/appengine/docs/python/datastore/overview#Python_Datastore_API阅读存储数据的appengine,您的代码看起来与GAE(Google Appengine代码)无关
你的学生课应该看起来像(如果你想要一个奖励领域有一些结构)
class Reward(ndb.Model):
reward = ndb.StringProperty()
value = ndb.IntegerProperty()
class Student(ndb.Model):
name = ndb.StringProperty(required=True)
rewards = ndb.StructuredProperty(Reward, repeated=True)
total_reward_points = ndb.IntegerProperty()
s_id = ndb.StringProperty()
否则,如果您使用db.Model,则奖励将是db.BlobProperty(),然后您将使用json在保存数据时使用pickle.dumps或json.dumps使用json编码奖励字典。