所以我对倭黑猩猩来说有点新,我想弄清楚。我也是python的新手,所以这个项目有点令人生畏。我试图将mysql(使用SQLAlchemy作为服务)输入流转换为XML输出。我已经成功设置了我的数据库流,但是我对如何创建一个迭代我的select结果的转换感到很遗憾。有人知道这方面的一些例子吗?
官方的例子只是调用内置的编写器函数(CsvWriter等)。我需要写一个会写出XML的。我已经查看了bonobo writer函数构建的内部代码,但我仍然对如何编写自己的编写器感到困惑。有没有人知道自定义编写器的一些例子,这对初学者来说足够简单。
或者也许可以编写一个非常简单的示例的快速示例,该示例迭代查询结果?
我正在使用
bonobo_sqlalchemy.Select('SELECT * FROM UserData')
作为我在我的链条中的第一次转换,我已经能够将我的选择结果打印出来......这样才有效。我只需要一个迭代集合的示例转换。
答案 0 :(得分:2)
实现所描述内容的最简单方法是使用上下文处理器。
import bonobo
def xml_document(self, context):
context.send('<document>')
yield
context.send('</document>')
@bonobo.config.use_context_processor(xml_document)
def make_me_an_xml(id, name):
yield ' <id>{id}</id><name>{name}</name>'.format(id=id, name=name)
def get_graph(**options):
graph = bonobo.Graph(
[{
'id': 1,
'name': 'Jane'
}, {
'id': 2,
'name': 'John'
}], bonobo.UnpackItems(0), bonobo.OrderFields(['id', 'name']), make_me_an_xml, print
)
return graph
if __name__ == '__main__':
with bonobo.parse_args() as options:
bonobo.run(get_graph(**options))
您无法直接在函数中执行此操作的原因是,bonobo中的节点使用每个输入一行调用逻辑,并且不知道(默认情况下)整个执行上下文
它允许保持转换功能无状态。但你确实可以用bonobo理解的工作长度逻辑来装饰。
请注意,此API可能会在将来发展,因为它并不完全令人满意。
如果您确实需要在行级转换中使用上下文,您还可以使用@bonobo.config.use_context
装饰器修饰转换。
希望有所帮助。