python - App Engine,两个实体之间的交叉引用

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

我希望有两种类型的实体相互引用。 但是 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/

相关文章:

java - 如何删除内置数据存储索引

google-app-engine - 有没有办法在google flexible appengine中自定义nginx代理

java - 如果其中的对象过多,开发服务器上的数据存储访问速度会非常慢

java - 在数据存储 View 中找不到使用 objectify 持久化的实体

python - 为带有祖先的 key 创建一个好看的 url

google-cloud-platform - 将实体导入本地 GCP 数据存储模拟器

python - 为什么 python dict 对象会解开元组的单个元素,但如果这是一个列表对象,它会将其保存在容器中?

python - 修改 Flask-Login @Login_Required 装饰器

python - 如何使用 BeautifulSoup 获取页面上特定文本后面的一些内容?

python - 我无法使用 cv2 的 VideoCapture 打开网络摄像头