2

我目前使用 Vim 来读取SO 的数据转储。但是,当我只滚动几行时,我的 Macbook 会变慢。这表明我必须有更有效的方法来读取数据。

我对MySQL知之甚少。这些文件采用 .xml 格式。目前在 .xml 中读取数据相当困难。将 xml 文件转换为 MySQL 然后读取文件可能更有效。我只知道用于此类操作的 MS db -tool。但是,我也想知道另一个工具。

问题

  1. 将 .xml 解析为 SQL 查询,以便 MySQL 能够理解它。我们需要知道数据的数据结构。
  2. 在 MySQL 中运行数据
  3. 找到一些类似于 MS db -tool 的工具,通过它我们可以有效地读取数据

您如何有效地阅读 SO 的数据转储?

--

[编辑]

  1. 如何在终端中运行523 SQL 查询来创建数据库?我现在在文本文件中有命令。
  2. 你怎么能“切换到[恢复模式]到数据库中的简单恢复模式?
4

1 回答 1

2

我制作了我的第一个 python 程序来读取它们并输出用于 mysql 的 SQL 插入语句(它很丑但有效)。您需要先手动创建表格。

import xml.sax.handler
import xml.sax
import sys
class SOHandler(xml.sax.handler.ContentHandler):
        def __init__(self):
                self.errParse = 0

        def startElement(self, name, attributes):
                if name != "row":
                        self.table = name;
                        self.outFile = open(name+".sql","w")
                        self.errfile = open(name+".err","w")
                else:
                        skip = 0
                        currentRow = u"insert into "+self.table+"("
                        for attr in attributes.keys():
                                currentRow += str(attr) + ","
                        currentRow = currentRow[:-1]
                        currentRow += u") values ("
                        for attr in attributes.keys():
                                try:
                                        currentRow += u'"{0}",'.format(attributes[attr].replace('\\','\\\\').replace('"', '\\"').replace("'", "\\'"))
                                except UnicodeEncodeError:
                                        self.errParse += 1;
                                        skip = 1;
                                        self.errfile.write(currentRow)
                        if skip != 1:
                                currentRow = currentRow[:-1]
                                currentRow += u");"
                                #print len(attributes.keys())
                                self.outFile.write(currentRow.encode("utf-8"))
                                self.outFile.write("\n")
                                self.outFile.flush()
                                print currentRow.encode("utf-8");

        def characters(self, data):
                pass

        def endElement(self, name):
                pass

if len(sys.argv) < 2:
        print "Give me an xml file argument!"
        sys.exit(1)

parser = xml.sax.make_parser()
handler = SOHandler()
parser.setContentHandler(handler)
parser.parse(sys.argv[1])
print handler.errParse
于 2009-07-18T11:00:50.823 回答