Google App Engine - 多个子/父

时间:2015-08-25 02:12:13

标签: python google-app-engine google-cloud-datastore

我想制作像这样的db模型的朋友系统:

class Users(ndb.Model):
    username = ndb.StringProperty(required = True)
    bio = ndb.StringProperty()

class friend_list(ndb.Model):
    list = ndb.StringProperty(repeated=True)

class friend_pending(ndb.Model):
    list = ndb.StringProperty(repeated=True)
friend_pending是尚未接受的朋友的模特。虽然friend_list是被接受的朋友的模型。

我想将friend_list和friend_pending都设为Users实体的子项。有可能吗?

如果不可能,这是第二种方法:

    class Users(ndb.Model):
        username = ndb.StringProperty(required = True)
        bio = ndb.StringProperty()

    class friend_list(ndb.Model):
        user_username = ndb.StringProperty(required = True)
        list = ndb.StringProperty(repeated=True)

    class friend_pending(ndb.Model):
        user_username = ndb.StringProperty(required = True)
        list = ndb.StringProperty(repeated=True)

如果两者都有可能,那么成本和性能会更好吗?

1 个答案:

答案 0 :(得分:1)

  

我想将friend_list和friend_pending都设为Users实体的子项。有可能吗?

是。创建实体时,可以使用“parent”参数指定实体的父(或父项)。

Google's Entity Keys部分涵盖了这一点。

示例:

#Create User entity
#This code assumes you're using GAE's built-in user's class
user = users.User("Albert.Johnson@example.com")
user.put()

#Create a friend list and set its parent to the user we create above
friend_list = Friend_List(parent=user)

#Save to datastore
friend_list.put()​

请记住,GAE中的Users类是专门定义的,并且具有您需要确认的其他功能。请参阅文档here

  

如果两者都有可能,那么成本和性能会更好吗?

我不能肯定地说,因为我不确切知道你将如何使用这些模型,但在大多数(可能是所有)情况下,你的第一种方法会更有效率。

最后,数据存储模型的正确命名约定是将首字母大写。例如,您的朋友列表类应为“Friend_List”。