python - 在 App Engine 数据存储区中包含(而不是引用)一个模型到另一个模型中?

标签 python google-app-engine

堆栈的人们,你们好。

我觉得一定有一个明显的答案,但是我做了很多搜索,阅读了很多文档和代码,但找不到答案。

(出于保密原因,我将在下面隐藏一些实际名称......)

这是我的第一个 AppEngine 项目,尽管我已经编写了很多 Python 代码。

我正在编写一个简单的应用程序,从概念上讲,它只有一个“数据库表”,一个模型 - 称之为“人”,它代表这个,呃,狗主人俱乐部中的一个人。

Person 有很多部分,其中一些具有自己的内部结构的重复部分,例如“DogsOwned”和“PlayDates”。我想要的是这些部分的单独定义,我将它们组合在一起形成一个完整的模型,因此我有一个 DogsOwned.py 和一个 PlayDates.py,它们在我的主文件 Person.py 中引用。

我重申,我不需要单独的 DogsOwned 或 PlayDates“数据库表”!我对作为 Person 的一部分包含的 DogsOwned 或 PlayDates 感兴趣。

遗憾的是,google.appengine.ext.db.Model 似乎无法包含另一个模型。您可以使用google.appengine.ext.db.ReferenceProperty,但这似乎通过键引用另一个对象,要求我“创建另一个数据库表”(我知道我的术语不太正确,但你明白了)。

因此,为了检索整个 Person 记录,在我看来,必须有多个查询,一个查询用于获取 Person,另一个查询用于 DogsOwned 或 PlayDates 中的每个条目。它们都将共享相同的实体组,因此它们应该是连贯的,并且都应该是可扩展的 - 但“我”在某种意义上会被谷歌“通过查询”计费,所以当涉及到它时,我'我希望将查询数量保持在尽可能低的水平。或者...也许实体组以某种方式神奇地解决了我的问题?

征求您的启发性意见!提前致谢。

更新:

换句话说:我希望模型包含重复的子元素 - 用伪代码,

struct Person {
  Dog dogsOwned[];
  PlayDates playDates[];
};

其中 Dogs 和 PlayDates 不是原始属性。

Python 继承对此没有用 - 你不能多次继承同一个类,更根本的是,我想要“contains”,而不是“isa”。

最佳答案

通过将 Person 设为其他两种类型 (IIRC) 的父实体,您可以将所有实体保留在同一实体组中。如果可以安全地序列化狗和玩耍日期,您可以使用 StringListProperty 作为它们的 JSON 版本,并将所有内容保留在 Person 实体内。

如果您希望降低数据存储操作,可以使用 memcache 来防止重复读取常用实体。

关于python - 在 App Engine 数据存储区中包含(而不是引用)一个模型到另一个模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385225/

相关文章:

python - 迭代不同的 pandas 数据框名称

python - 如何从可以在 VBA 中调用的简单 python 代码创建 dll

python - 如何在多索引 Pandas 数据框中获取随机样本?

google-app-engine - 非数据库应用程序的 GAE 数据存储设置

python - 查找函数输出的输入依赖关系

python - 二维 numpy 数组 : remove masked elements

python - GAE Django 交易

python - 数据库上的谷歌应用程序引擎字符串列表属性

python - 对 App Engine 数据库的查询显示为空白

google-app-engine - 部署应用引擎后的暂存文件桶