GAE:将模型转换为polymod的子类

2024-10-03 17:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个现有的GAE应用程序,有一个相当少的实体,我想更新实体使用polymodel。在

我目前有这样的实体:

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

我想改成这样:

^{pr2}$

我目前的计划是做以下程序:

  1. 迭代所有现有实体,将类名更改为某个临时类名。E、 g.将class Mammal(db.Model)转换为class MammalTmp(db.Model),并将class Reptile(db.Model)转换为{}。在执行此操作时,我会将旧类的所有属性复制到新类中。

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

  3. 迭代所有临时实体,将类名更改为所需的类名和类型。E、 g.将class MammalTmp(db.Model)转换为class Mammal(polymodel.Polymodel),并将class ReptileTmp(db.Model)转换为{}。我会再次将旧类的所有属性复制到新类中。

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

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


Tags: 实例实体dbmodel属性class我会类名
2条回答

对于实体的构建和索引的方式,不幸的是没有其他方法(据我所知)来执行类似的过程。当我第一次想实现多模型时,我不得不这样做,这就是我的方法。幸运的是,所有这些都可以通过代码来完成,所以你不必真的坐在电脑前手动更改所有这些。在

这当然很长,但是想想数据存储提供的所有速度优势。这就是为什么在创建模型时首先要小心。我知道这不一定很容易(就像我说的,我和你陷入了同样的困境,不得不为那些迭代和更改编写代码)。在

以编程方式完成这样一个过程的一个非常好的方法是使用MapReduce。一个“地图绘制者”绝对可以做到这一点,并帮助你更快、更有效地完成这项工作。研究the sample projects可能会给你一些提示。在

我对GAE一点都不熟悉,但您可以通过中介重定向模型定义吗?不过,对你所有的模型重命名都不会快。在

创建重定向类以开始:

# redirect.py
# note: I don't really know where db comes from...
import gae.db as db

class Model(db.Model):
    pass

然后将以下行添加到模型文件中:

^{pr2}$

由于db现在是redirect版本,所以可以更改重定向文件。。在

class Model (db.PolyModel):
    pass

但现在我已经编写了它,这听起来就像手动更新文件一样多,而且您将失去对db.的其他基本操作的所有访问权。所以,也许我应该否决我自己的答案。:天

相关问题 更多 >