我希望有两种类型的实体相互引用。 但是 python 还不知道第一个主体中第二个实体类的名称。 那么我该如何编码。
class Business(db.Model):
bus_contact_info_ = db.ReferenceProperty(reference_class=Business_Info)
class Business_Info (db.Model):
my_business_ = db.ReferenceProperty(reference_class=Business)
如果您建议只在一个中使用引用并使用隐式创建的属性 (这是一个查询对象)在其他。 然后我质疑使用查询与直接在键上使用 get() 的 CPU 配额惩罚
请教如何用python写这段代码
最佳答案
查询有点慢,所以它们确实使用了更多的资源。 ReferenceProperty不需要reference_class。所以你总是可以像这样定义业务:
class Business(db.Model):
bus_contact_info_ = db.ReferenceProperty()
您的数据结构也可能有更好的选择。查看modelling relationships一些想法的文章。
这是一对一的映射吗?如果这是一对一映射,您最好对数据进行反规范化。
它会改变吗?如果不是(并且它是一对一的),也许您可以使用实体组并构建您的数据,以便您可以直接使用键/键名。您可以通过使 BusinessInfo 成为 Business 的子项来实现此目的,然后始终使用“i”作为 key_name。例如:
business = Business().put()
business_info = BusinessInfo(key_name='i', parent=business).put()
# Get business_info from business:
business_info = db.get(db.Key.from_path('BusinessInfo', 'i', parent=business))
# Get business from business_info:
business = db.get(business_info.parent())
关于python - App Engine,两个实体之间的交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306547/