我有一个现有的 GAE 应用程序,其中的实体数量相当少,我想更新实体以使用 Polymodel。
我目前有这样的实体:
class Mammal(db.Model)
class Reptile(db.Model)
我想将其更改为:
class Animal(polymodel.Polymodel)
class Mammal(Animal)
class Reptile(Animal)
我当前的计划是执行以下过程:
迭代所有现有实体,将类名更改为某个临时类名。例如,将
class Mammal(db.Model)
转换为class MammalTmp(db.Model)
并将class Reptile(db.Model)
转换为类 ReptileTmp(db.Model)
。在此过程中,我会将旧类的所有属性复制到新类。删除
class Mammal(db.Model)
和class Reptile(db.Model)
的所有实例。迭代所有临时实体以将类名称更改为所需的类名称和类型。例如,将
class MammalTmp(db.Model)
转换为class Mammal(polymodel.Polymodel)
并将class ReptileTmp(db.Model)
转换为类 Reptile(polymodel.Polymodel)
。我将再次将旧类的所有属性复制到新类。删除
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/