2

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

这是滤锅模式的示例:

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

3 回答 3

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。

差不多就是这样!

于 2012-07-05T11:24:25.517 回答
0

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

于 2011-10-17T20:08:15.020 回答
0

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

于 2015-06-15T20:25:57.747 回答