python - GAE : Convert model to subclass of polymodel

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

我有一个现有的 GAE 应用程序,其中的实体数量相当少,我想更新实体以使用 Polymodel。

我目前有这样的实体:

class Mammal(db.Model)
class Reptile(db.Model)

我想将其更改为:

class Animal(polymodel.Polymodel)
class Mammal(Animal)
class Reptile(Animal)

我当前的计划是执行以下过程:

  1. 迭代所有现有实体,将类名更改为某个临时类名。例如,将 class Mammal(db.Model) 转换为 class MammalTmp(db.Model) 并将 class Reptile(db.Model) 转换为 类 ReptileTmp(db.Model)。在此过程中,我会将旧类的所有属性复制到新类。

  2. 删除class Mammal(db.Model)class Reptile(db.Model)的所有实例。

  3. 迭代所有临时实体以将类名称更改为所需的类名称和类型。例如,将 class MammalTmp(db.Model) 转换为 class Mammal(polymodel.Polymodel) 并将 class ReptileTmp(db.Model) 转换为 类 Reptile(polymodel.Polymodel)。我将再次将旧类的所有属性复制到新类。

  4. 删除 class MammalTmp(db.Model)class ReptileTmp(db.Model) 的所有实例。

这是一个费力的过程!有没有更简单的方法来实现这一点?

最佳答案

按照构建实体然后建立索引的方式,不幸的是,没有其他方法(据我所知)可以执行类似的过程。当我第一次想要实现多模型时,我必须这样做,这就是我所做的。幸运的是,所有这些都可以通过代码完成,因此您实际上不必坐在计算机前手动更改所有这些。

这确实很长,但想想数据存储提供的所有速度优势。这就是为什么您必须首先小心创建模型的原因。我知道这不一定容易(正如我所说,我和你陷入了同样的困境,并且必须为这些迭代和更改编写代码)。

以编程方式执行此过程的一个非常好的方法是使用 MapReduce 。 “映射器”绝对可以解决这个问题,并帮助您更快、更有效地完成任务。调查the sample projects可能会给你一些指导。

关于python - GAE : Convert model to subclass of polymodel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845292/

相关文章:

python - 当这些列的名称与列表中的名称匹配时,如何跨 pandas 列添加所有值?

python - Seaborn 分布图为每个直方图箱的计数添加标签

python - 正确使用模板

python - Google App Engine 中的请求感知代码 - os.environ?

google-app-engine - Google Appengine(GAE)::使用GAE memcached时如何防止狗堆效应?

python - 向 rabbitmq 发送 celery 任务消息

google-app-engine - 我可以在 App Engine 上使用全文搜索按文档 ID 进行查询吗?

python - 检查 db 是否包含运行 Python 的 Google App Engine 上的 1000 个 ID 中的一个或多个

java - 对于 Google App Engine (java),如何在 FetchOptions 中设置和使用 block 大小?

java - 在 Appengine 数据存储查看器中编辑文本字段