我希望有两种类型的实体相互引用。 但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)
如果您建议仅使用一个引用并使用隐式创建的属性 (在其他方面是一个查询对象)。 然后我质疑使用查询vs直接使用密钥
上的get()的CPU配额惩罚请告知如何在python中编写此代码
答案 0 :(得分:4)
查询速度稍慢,因此他们会使用更多资源。 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())