【问题标题】:App Engine, Cross reference between two entitiesApp Engine,两个实体之间的交叉引用
【发布时间】:2010-11-29 17:55:25
【问题描述】:

我希望有两种类型的实体相互引用。 但是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编写这段代码

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    查询会慢一些,因此它们确实会使用更多资源。 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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2016-03-13
      相关资源
      最近更新 更多