在Python中以XML格式返回SQL查询

3 投票
1 回答
3935 浏览
提问于 2025-04-15 23:25

我刚开始在现在的公司工作时,创建了一个Java应用程序,用来批量处理jasper-reports报告。为了确定每个报告需要使用哪些参数,我会运行一个SQL查询(在SQL Server上)。我写的这个应用程序可以接收一个XML文件,里面包含了要生成的每个报告的参数。因此,我的整个流程实际上分为三个步骤:

  1. 运行SQL查询,并将结果以XML格式返回(使用'for XML auto')。
  2. 将SQL查询的结果通过XSLT转换,这样生成的XML格式就能被我写的Java应用程序友好地识别。
  3. 用最终生成的XML文件运行Java应用程序。

你可以想象,我希望能用Python来完成这些步骤,但我不太确定该从哪里开始。我知道如何在Python中运行SQL查询,也看到很多关于如何用Python写自己的XML文档的资料,甚至还有关于Python中XSL转换的文档。

我最大的疑问是,如何通过Python获取SQL查询的结果并转换成XML格式。任何建议都会非常有帮助。谢谢!

1 个回答

1

我想,如果你用 'FOR XML AUTO' 来执行你的 SQL 查询,结果会得到一个记录集,里面有一条记录(就是那个 XML)。然后你可以取出第一条记录,接着继续你的应用程序。

下面是一个使用 pyodbc 的例子:

cursor.execute("select user_name from users where user_id=? for xml auto", userid)
xml = cursor.fetchone()
if xml:
    # do your xsl transformation and other processing here...

编辑

在我的测试中,我选择了很多字段(我觉得)可能超出了某个行对象的缓冲区大小,所以它把记录拆分了。

根据我的测试,我需要的代码是:

cursor.execute("select user_name from users where user_id=? for xml auto", userid)
rows = cursor.fetchall()
xml = ''.join(row[0] for row in rows)

撰写回答