我一直在使用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”而不是base继承文档类和字段类型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()每个文档的每个字段类型,我应该能够构建或引用一个为我处理的常用函数。
然而,我的超级()技能很弱。我甚至不确定这是否是最佳方法。我希望有人能够并且愿意分享一些关于如何处理这个问题的提示。