【问题标题】:Import XML into SQL database将 XML 导入 SQL 数据库
【发布时间】:2010-10-17 22:46:09
【问题描述】:

我正在处理一个 20 gig 的 XML 文件,我想将它导入 SQL 数据库(最好是 MySQL,因为这是我熟悉的)。这似乎是一项常见的任务,但在谷歌搜索了一下之后,我无法弄清楚如何去做。做这个的最好方式是什么?

我知道 MySQL 6.0 中内置了此功能,但目前还不能这样做,因为它是一个 alpha 开发版本。

另外,如果我必须编写任何脚本,我更愿意使用 Python,因为这是我最熟悉的。

谢谢。

【问题讨论】:

    标签: python sql xml


    【解决方案1】:

    MySQL documentation 似乎并不表示 XML 导入仅限于版本 6。它显然也适用于 5。

    【讨论】:

      【解决方案2】:

      看看ElementTreecElementTree 中的iterparse() 函数(我猜如果你可以使用cElementTree 会是最好的)

      这篇文章或多或少地描述了你需要做的事情:http://effbot.org/zone/element-iterparse.htm#incremental-parsing

      这可能是在 Python 中最有效的方法。确保不要忘记在适当的元素上调用 .clear()(您真的不想构建 20gig xml 文件的内存树:另一个答案中描述的 .getiterator() 方法是稍微简单一点,但确实首先需要整棵树 - 我假设海报实际上也考虑了iterparse()

      【讨论】:

        【解决方案3】:

        这可能是一项常见的任务,但也许 20GB 在 MySQL 中并不像在 SQL Server 中那样常见。

        我使用 SQL Server Integration Services 和一些自定义代码完成了这项工作。您是否需要其中任何一个取决于您需要在数据库中使用 20GB 的 XML 做什么。它将是表中单行的单列吗?每个子元素一行?

        如果您只想将 XML 存储为 XML,SQL Server 具有 XML 数据类型。这种类型允许您使用 XQuery 进行查询,允许您在 XML 上创建 XML 索引,并允许通过将 XML 列引用到存储在数据库中的一组 XML 模式来“强类型化”XML 列。

        【讨论】:

        • 我真的很想摆脱 XML 并将数据存储为适当命名的列。这是一种非常简单的格式(来自具有下载 API 的公共内容站点的文档)。
        【解决方案4】:

        您可以使用 getiterator() 函数来遍历 XML 文件,而无需一次解析整个文件。您可以使用包含在标准库中的ElementTreelxml 来执行此操作。

        for record in root.getiterator('record'):
            add_element_to_database(record) # Depends on your database interface.
                                            # I recommend SQLAlchemy.
        

        【讨论】:

          【解决方案5】:

          我已经用 Python 做过几次了,但从来没有用过这么大的 XML 文件。 ElementTree 是一个出色的 Python XML 库,可以提供帮助。如果可能的话,我会将 XML 分成更小的文件,以便更容易加载到内存中并进行解析。

          【讨论】:

          • SAX Parser 有助于将大的 XML 文件分解成小块。
          猜你喜欢
          • 2011-09-06
          • 1970-01-01
          • 1970-01-01
          • 2012-06-03
          • 1970-01-01
          • 2016-05-04
          • 2015-05-03
          • 1970-01-01
          相关资源
          最近更新 更多