从MySQL(SQLAlchemy)读取后,需要帮助编写bonobo XML writer转换吗

2024-05-23 23:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我对倭黑猩猩有点陌生,我正试着弄清楚。我对python也有点陌生,所以这个项目有点吓人。我试图将mysql(使用SQLAlchemy作为服务)输入流转换为XML输出。我已经成功地建立了我的数据库流,但是我有点迷茫于如何创建一个将迭代我的select结果的转换。有人知道这方面的一些例子吗?在

官方示例只是调用内置的writer函数(CsvWriter等)。我需要写一个能写出XML的。我已经看过了内置bonobo writer函数的内部代码,但是我仍然对如何编写自己的writer感到困惑。有人知道一些对初学者来说足够简单的自定义编写器的例子吗。在

或者可以写一个简单的例子来迭代查询的结果?在

我正在使用

bonobo_sqlalchemy.Select('SELECT * FROM UserData') 

作为我在我的链中的第一个转换,我已经能够预先打印我选择的结果。。。所以这是有效的。我只需要一个遍历集合的示例转换。在


Tags: 项目函数数据库示例官方sqlalchemymysqlxml
1条回答
网友
1楼 · 发布于 2024-05-23 23:26:24

实现您所描述的最简单的方法是使用上下文处理器。在

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中的节点使用每输入行一次调用的逻辑,而不知道(默认情况下)整个执行上下文。在

它允许转换函数保持无状态。但你确实可以用倭黑猩猩理解的工作长度逻辑来装饰。在

请注意,这个API可能会在将来发展,因为它并不完全令人满意。在

如果确实需要在行级转换中使用上下文,还可以使用@bonobo.config.use_context修饰符装饰转换。在

希望有帮助。在

相关问题 更多 >