Я новичок в 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 не принимает соединения, поэтому нужно эмулировать желаемое "соединение" с использованием методов и свойств класса. С помощью описанной выше системы я могу легко получить доступ к свойству во второй базе данных (Info) через уникальное свойство в первой (в данном случае «имя» — предположим, что нет двух монстров с одинаковым именем).
Однако, если я хочу напечатать список со 100 именами монстров и соответствующими адресами, вторая база данных (информация) будет поражена 100 раз.
Вопрос: есть ли лучший способ смоделировать это для повышения производительности?