【问题标题】:Creating dynamic documents in Flask-MongoAlchemy在 Flask-MongoAlchemy 中创建动态文档
【发布时间】:2012-12-13 23:11:29
【问题描述】:

我将 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 字段应该是类属性而不是实例属性有关。有什么帮助吗?

【问题讨论】:

    标签: python flask mongoalchemy


    【解决方案1】:
    class Bar(db.Document):
        config_extra_fields = 'ignore'
        ...
    
    class Baz(db.Document):
        config_extra_fields = 'ignore'
        ...
    

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多