0

我使用 mongoengine 已经有一段时间了,并且有大量依赖于一组通用对象文档模型的 python 数据处理代码。

现在我需要从 Flask 访问相同的 mongodb 实例。我想使用相同的 ODM 定义。

class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

问题在于,flask-mongoengine 要求您首先设置您的烧瓶上下文“db”,然后构建您的 ODM 定义,从“db”而不是基本 mongoengine 类继承文档类和字段类型。

class User(db.Document):
    email = db.StringField(required=True)
    first_name = db.StringField(max_length=50)
    last_name = db.StringField(max_length=50)

我想,一种解决方案是复制所有现有的 ODM 定义,从我的主要烧瓶应用程序中导入“db”,然后在所有内容前面加上“db”。如果我这样做,我将不得不维护两组几乎相同的 ODM 定义。

如果我只是将所有内容更改为“db”。版本,这可能会破坏我所有的遗留代码。

所以我认为在文档类上使用 super() 可能会有一个技巧,它可以检测我是将我的 ODM 导入到 Flask 上下文中,还是从独立的数据处理脚本中导入它。

我也在想我不想为每个文档都超级()每个字段类型,我应该能够构建或引用一个为我处理这个问题的通用函数。

但是,我的 super() 技能很弱。我什至不确定这是否是最好的方法。我希望有人能够并愿意分享一些关于如何解决这个问题的提示。

4

0 回答 0