如何在googledatastorendb(Python库)中实现连接场景

2024-03-29 05:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种:

class Professor(ndb.Model):
    name = ndb.StringProperty()
    email = ndb.StringProperty()

class Student(ndb.Model):
    professor = ndb.KeyProperty(kind=Professor)
    name = ndb.StringProperty()
    age = ndb.IntegerProperty()

我想找到教授名字是“斯内普”的所有学生实体。我该怎么做?在

或者以https://cloud.google.com/appengine/articles/modeling的“一对多”为例。然后我想找到所有的电话号码实体联系人姓名是“斯科特”。如何做到这一点。在

appengine示例仅说明如何过滤PhoneNumber属性。如果我想过滤相关类型,即联系人属性,怎么办。在


Tags: name实体model属性email联系人studentclass
2条回答

为此,我建议使用^{}作为学生模型的属性来引用给定的教授。在

class Professor(ndb.Model):
  name = ndb.StringProperty()

class Student(ndb.Model):
  name = ndb.StringProperty()
  prof = ndb.KeyProperty()

有了上述实体类型,就可以使用只键查询来查询所有名为“Snape”的教授,然后查询prof为one of the retrieved keys的所有学生。在

^{pr2}$

你可以这样做。在

# professor model
class Professor(ndb.Model):
    name = ndb.StringProperty()
    email = ndb.StringProperty()

# student model
class Student(ndb.Model):
    name = ndb.StringProperty()
    age = ndb.IntegerProperty()

snape = ndb.Key(Professor, 'snape')
Professor(name="Professor Snape", email="snape@blah.edu", key=snape).put()


st1 = Student(name="Akshar", age=18, parent=snape)
st2 = Student(name="Greg", age=19, parent=snape)
st3 = Student(name="Alex", age=18, parent=snape)

st1.put()
st2.put()
st3.put()

# so lets say give me all students that has class with Professor Snape
for student in Student.query(ancestor=snape).fetch(10):
    print student.name

# You should get something:
Akshar
Greg
Alex

相关问题 更多 >