将XML导入SQL数据库

5
我正在处理一个20GB的XML文件,希望将其导入到SQL数据库中(最好是MySQL,因为我熟悉它)。这似乎应该是常见的任务,但在Google上搜索了一下后,我还没有找到如何做到这一点。最佳方法是什么?
我知道MySQL 6.0内置了此功能,但现在不行,因为它是Alpha开发版本。
另外,如果需要进行任何脚本编写,我更喜欢使用Python,因为那是我最熟悉的语言。
谢谢。
5个回答

4
您可以使用getiterator()函数在不一次解析整个XML文件的情况下迭代它。您可以使用标准库中包含的ElementTreelxml来实现此操作。
for record in root.getiterator('record'):
    add_element_to_database(record) # Depends on your database interface.
                                    # I recommend SQLAlchemy.

2
请看一下来自ElementTree或cElementTree的iterparse()函数(如果可以使用cElementTree,则最好使用它)。
这篇文章描述了您需要做的事情:http://effbot.org/zone/element-iterparse.htm#incremental-parsing 这可能是在Python中最有效的方法。确保不要忘记在适当的元素上调用.clear()(你真的不想构建一个20GB XML文件的内存树:在另一个答案中描述的.getiterator()方法稍微简单,但确实需要整个树 - 我假设发布者实际上也考虑了iterparse())。

1

我以前用Python做过几次类似的事情,但从未处理过如此大的XML文件。ElementTree是Python中一款非常出色的XML库,可以提供帮助。如果可能的话,我会将XML文件分成较小的文件,以便更容易地加载到内存并解析。


1
SAX解析器有助于将大型XML文件分解成多个部分。 - S.Lott

0

这可能是一个常见的任务,但在MySQL中使用20GB可能不像在SQL Server中那样常见。

我使用了SQL Server Integration Services和一些自定义代码来完成这个任务。是否需要这两者取决于您需要在数据库中处理20GB XML的内容。它将成为表的单个行的单个列吗?每个子元素都有一行?

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


我真的很想摆脱XML,只是将数据存储为适当命名的列。这是一个相当简单的格式(来自具有下载API的公共内容站点的文档)。 - Jacob Lyles

0

MySQL文档似乎没有表明XML导入仅限于版本6。它似乎也适用于5。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接