【问题标题】:return sql query in xml format in python在python中以xml格式返回sql查询
【发布时间】:2010-06-01 19:14:00
【问题描述】:

当我第一次开始在我现在工作的公司工作时,我创建了一个 Java 应用程序,它可以运行成批的 jasper-reports。为了确定对报告集中的每个报告使用哪些参数,我运行了一个 sql 查询(在 sqlserver 上)。我编写了应用程序来获取一个 xml 文件,其中包含一组参数,用于在集合中生成的每个报告。所以,我的流程实际上变成了三个步骤:

  1. 运行 sql 查询并以 XML 格式返回结果(使用“for XML auto”)
  2. 通过 XSLT 转换运行 sql 查询的结果,因此 xml 的格式与我编写的 java 应用程序友好。
  3. 使用最终的 xml 文件运行 java 应用程序

您可以想象,我想做的是在 python 中完成这些步骤,但我不太确定如何开始。我知道如何在 Python 中运行 SQL 查询。我看到很多关于如何使用 Python 编写自己的 xml 文档的文档。我什至在 python 中看到了 xsl 转换的文档。

最大的问题是如何通过python获取xml中sql查询的结果。任何和所有指针都将非常有价值。 谢谢, _拉米

【问题讨论】:

    标签: python sql xml


    【解决方案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)
    

    【讨论】:

    • 实际上非常接近。问题是它返回的一条记录是指向 XML 文档的链接(而不是其中包含 XML 文本的字段)...
    • 当我用它进行测试时,我得到了一个包含两条记录的记录集,但它们包含 XML(需要将其连接在一起才能生效),而不是链接......
    • 它指向内存中的一个临时位置。如果我左键单击链接,它会打开一个新的编辑器选项卡并显示 xml。如果我右键单击,我可以选择“另存为”。我正在使用 SQLServer 2008。我将尝试使用底部的 for xml 自动行从 python 调用查询。
    • 这是一个不同的转变。我收到此异常:错误:SQL Server 消息 4004,严重性 16,状态 1,第 16 行:无法使用 DB-Library(例如 ISQL)或 ODBC 将仅 Unicode 排序规则或 ntext 数据中的 Unicode 数据发送到客户端版本 3.7 或更早版本。 DB-Lib 错误消息 10007,严重性 5:常规 SQL Server 错误:检查来自 SQL Server 的消息。
    • 我在不同的地方看到了一些关于这个异常的不同帖子。我找到的最接近解决方案的是:use.perl.org/~jdavidb/journal/37102 除了我似乎找不到任何 freetds.conf 文件......
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多