Python 将基本mongoengine文档定义拉入mongoengine

Python 将基本mongoengine文档定义拉入mongoengine,python,mongodb,mongoengine,flask-mongoengine,Python,Mongodb,Mongoengine,Flask Mongoengine,我已经使用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 m

我已经使用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要求您首先设置flask上下文“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定义,从我的主flask应用程序中导入“db”,然后在所有内容前面加上“db”。如果这样做,我将不得不维护两组几乎相同的ODM定义

class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)
如果我简单地将所有内容更改为“db.”版本,那么可能会破坏我所有的遗留代码

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

我也在想,我不想对每个文档的每个字段类型都进行super()操作,我应该能够构建或引用一个公共函数来为我解决这个问题


然而,我的超能力很弱。我甚至不确定这是否是最好的方法。我希望有人能够并且愿意分享一些关于如何实现这一点的提示。

我自己也遇到过这个问题,正如您所建议的,如果您想在烧瓶上下文和非烧瓶上下文中使用相同的模型,可能会很棘手。然而,mongoengine所做的一切都是确保mongodb连接基于应用程序配置。我的解决方案是根本不使用flask mongoengine,只是在配置文件中自己创建到mongodb的连接。[我不知道为什么这个问题被否决了。]我认为解决这个问题的方法是使用PostgreSQL外部数据包装器,然后像我的其他PostgreSQL表一样,使用SQLAlchemy查询MongoDB集合。