gpt4 book ai didi

python - 在 Flask-MongoAlchemy 中创建动态文档

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:51 27 4
gpt4 key购买 nike

我在个人项目中使用 Flask-MongoAlchemy。我有一些 .cfg 输入文件,我想将其解析并制作成 mongodb 文档条目。不幸的是,.cfg 文件是平面文件,我想从每个文件制作多个不同的文档。我想在一个地方(在单独的 .cfg 文件中)定义我想使用的结构,并且 1) 在解析输入文件时将其转换为这种格式,以及 2) 使用这种结构创建 MongoAlchemy 文档类。我只是在 #2 上遇到了麻烦,但我愿意接受可以解决这两个目标的替代实现。

这是我的输入 .cfg 文件。我想将其制作成多个 mongodb 文档。

[foo]
a = val1
b = val2
c = val3
d = val4

这是定义结构的 documents.cfg。值是区分类型的数字。

[foo]
[[bar]]
a = 1
b = 1
[[baz]]
c = 2
d = 1

类的定义

class Bar(db.Document):
# add class attributes from kwargs
@classmethod
def init(cls, **kwargs):
for k, v in kwargs.items():
if v == 1:
setattr(cls, k, db.IntField(min_value=0))

class Baz(db.Document):
# add class attributes from kwargs
@classmethod
def init(cls, **kwargs):
for k, v in kwargs.items():
if v == 1:
setattr(cls, k, db.IntField(min_value=0))
elif v == 2:
setattr(cls, k, db.StringField())

我解析 documents.cfg 以创建两个字典:

bar_dict = {'a': '1', 'b': '1'}
baz_dict = {'c': '2', 'd': '1'}

然后我将它们传递给相应的 init() 方法

Bar.init(**bar_dict)
Baz.init(**baz_dict)

这样就成功添加了属性。但是,在创建 Bar(或 Baz)实例时出现此错误。

mongoalchemy.exceptions.ExtraValueException: a

我的猜测是,这与 MongoAlchemy 字段应该是类属性而不是实例属性这一事实有关。有帮助吗?

最佳答案

class Bar(db.Document):
config_extra_fields = 'ignore'
...

class Baz(db.Document):
config_extra_fields = 'ignore'
...

关于python - 在 Flask-MongoAlchemy 中创建动态文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com