我对 ndb 很陌生,但我已经明白我需要重新连接大脑中的某个区域来创建模型。我正在尝试创建一个简单的模型——只是为了理解如何设计一个 ndb 数据库——具有一对一的关系:例如,一个用户和他的信息。经过大量搜索 - 找到了文档,但很难找到不同的示例 - 并进行了一些实验(以几种不同的方式建模和查询),这是我找到的解决方案:
from google.appengine.ext import ndb
class Monster(ndb.Model):
name = ndb.StringProperty()
@classmethod
def get_by_name(cls, name):
return cls.query(cls.name == name).get()
def get_info(self):
return Info.query(Info.monster == self.key).get()
class Info(ndb.Model):
monster = ndb.KeyProperty(kind='Monster')
address = ndb.StringProperty()
a = Monster(name = "Dracula")
a.put()
b = Info(monster = a.key, address = "Transilvania")
b.put()
print Monster.get_by_name("Dracula").get_info().address
NDB 不接受连接,因此我们想要的“连接”必须使用类方法和属性来模拟。使用上述系统,我可以通过第一个数据库中的唯一属性(在本例中为“名称” - 假设没有两个同名的怪物)轻松访问第二个数据库(信息)中的属性。
但是,如果我想打印一个包含 100 个怪物名称和各自地址的列表,第二个数据库(信息)将被点击 100 次。
问题:有没有更好的方法对此进行建模以提高性能?