Python 从配置文件或数据库读取Colander架构

Python 从配置文件或数据库读取Colander架构,python,schema,pyramid,colander,Python,Schema,Pyramid,Colander,我在谷歌上搜索了一会儿,但找不到有关如何从配置文件或数据库检索Colander模式的参考。我认为这并不难实现,但我可能忽略了一些东西。也许有人做过或看到过类似的事情,可能会分享一些见解 下面是Colander模式的示例: class PageSchema(colander.MappingSchema): title = SchemaNode(String(), title='Page title',

我在谷歌上搜索了一会儿,但找不到有关如何从配置文件或数据库检索Colander模式的参考。我认为这并不难实现,但我可能忽略了一些东西。也许有人做过或看到过类似的事情,可能会分享一些见解

下面是Colander模式的示例:

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'')

colander不支持这一点。在这方面我知道的一件事是“利蒙”方案,它的作用正好相反。它能够从colander模式生成任意python对象。

正如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)
换句话说,它加载所有属性并使用类型操作符构建一个类。这种任务非常简单,应该和习惯的
语法一样有效。
exec
调用只是在本地推送名称。您可能会使用
locals()[schema\u name]=schmea
甚至其他作用域

这样,如果需要,您可以从任何地方加载模式。你可以自己建造一个工厂,比如:

  • schemas.get('PageSchema')
    ,如果可能,它将返回一个架构,如果不存在,它将不返回任何架构
差不多就是这样

可以做你需要的事。它接受SQLAlchemy对象并从中生成一个Colander模式。然而,从SQLAlchemy对象生成并不完全是“从数据库”