【问题标题】:read Colander Schema from a config file or database从配置文件或数据库中读取 Colander Schema
【发布时间】:2015-06-16 04:25:57
【问题描述】:

我搜索了一段时间,但找不到有关如何从配置文件或数据库中检索滤锅架构的参考资料。我认为这并不难实现,但我可能忽略了一些东西。也许有人做过或看到过类似的事情,并且可能会分享一些见解。

这里是滤锅模式的示例:

class PageSchema(colander.MappingSchema):
    title = SchemaNode(String(),
                       title='Page title',
                       description='The title of the page',
                       )
    description  = SchemaNode(String(),
                              title='A short description', 
                              description='Keep it under 60 characters or so',
                              missing = u'',
                              validator=colander.Length(max=79)
                              )
    body = colander.SchemaNode(colander.String(),
                               description='Tell the world',
                               missing = u'')

【问题讨论】:

    标签: python schema pyramid colander


    【解决方案1】:

    正如 micheal 所说,它可能不受支持。如果你真的需要它。这里有一些提示。

    按名称将您的架构保存在数据库中,例如:“PageSchema”。使用所有需要的参数将其所有记录保存在数据库中。

    你必须这样做:

    for row in rows:
        attrinbutes[row['name']] = build_attribute(row)
    
    schemas[schema_name] = type(schema_name, (colander.MappingSchema,), attributes)
    exec('%s = schemas[schema_name]' % schema_name)
    

    换句话说,它加载所有属性并使用类型运算符构建一个类。这种任务非常简单,应该和习惯的class 语法一样好用。 exec 调用只是将名称推送到本地。您可能可以使用locals()[schema_name] = schmea 甚至其他范围。

    这样,您可以在需要时从任何地方加载架构。你可以为自己建立一个工厂,例如:

    • schemas.get('PageSchema') 如果可能会返回一个模式,如果不存在则返回 None。

    差不多就是这样!

    【讨论】:

      【解决方案2】:

      滤锅不支持此功能。我在这方面所知道的一件事是相反的“柠檬”包。它能够滤锅模式生成任意python对象。

      【讨论】:

        【解决方案3】:

        ColanderAlchemy 可以满足您的需求。它接受 SQLAlchemy 对象并从它们生成滤锅模式。但是,从 SQLAlchemy 对象生成并不完全是“来自数据库”。

        【讨论】:

          猜你喜欢
          • 2018-04-06
          • 2021-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-18
          相关资源
          最近更新 更多