将XML导入SQL数据库

时间:2009-04-07 00:39:26

标签: python sql xml

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

我知道这个功能内置于MySQL 6.0中,但现在不是一个选项,因为它是一个alpha开发版本。

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

感谢。

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

查看iterparse()ElementTree中的cElementTree函数(我猜cElementTree最适合你使用它)

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

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

答案 2 :(得分:1)

我已经使用Python多次完成了这项工作,但从未使用如此庞大的XML文件。 ElementTree是一个优秀的Python XML库,可以提供帮助。如果有可能,我会将XML分成更小的文件,以便更容易加载到内存和解析。

答案 3 :(得分:0)

这可能是一项常见的任务,但是对于MySQL而言,20GB并不像SQL Server那么常见。

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

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

答案 4 :(得分:0)

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