如果您使用的是数字ID由数据存储区自动分配,当你put
一个实体,就可以然后用模型的方法get_by_id
存取实体:
class User(db.Model):
name = db.StringProperty()
# etc.
def AddUser(webapp2.RequestHandler):
def get(self):
newUser = User()
newUser.name = self.request.get('name')
# etc. assign all model properties
newUser.put()
# now, newUser.Key().id() contains the auto-assigned numeric id.
# we can pass this value to our template and get it back via
# a form paramter for subsequent operations.
def ShowUser(webapp2.RequestHandler):
def get(self):
user_to_show_id = self.request.get('id')
user_to_show = User.get_by_id(user_to_show_id)
if user_to_show is not None:
# populate the template parameters with the users's data
# and render the template
else:
# The requested user does not exist, so
# render an error message/page.
现在,如果你也想存储属于特定用户的电话号码实体,你让他们保存,使得他们的父母是用户实体。这将它们放在用户的实体组中,并且实体组中的实体可以比与父母一起存储时更快地被查询。
比方说,任何用户都可以有与之相关Phonenumber来实体中的任何给定数量:
class Phonenumber(db.Model):
number_type = db.StringProperty()
number = db.StringProperty()
我们将添加一个方法到User类:
def AddNumber(self, new_number_type, new_number):
new_number = Phonenumber(parent=self, number_type=new_number_type, number=new_number)
# In this case, self is the User entity, and by saying parent=self, we're putting
# this Phonenumber entity into User's entity group.
new_number.put()
def GetPhoneNumber(self):
# Now, getting all of User's phone numbers is a simple as a query with an
# Ancestor clause:
users_numbers = Phonenumber.all().ancestor(self).fetch(1000)
return users_numbers
显然,这些类天真无邪,直截了当,但我希望他们能帮助你理解身份证和祖先的关系。通常情况下,您不必使用Key()
手动创建密钥。除非你真的需要,否则不要走这条路。然而,如何理解键的作用是有利于真正理解AppEngine上,所以潜水和实验,如果你喜欢它的感觉。
我觉得那些是你的两个主要问题,是吗?如果你有其他人,请继续留言,我会编辑我的答案。
类似于你的问题:http://stackoverflow.com/questions/10156129/what-should-i-store-as-my-index-in-client-code – alex 2012-04-15 16:44:38