2

現在、Vim を使用してSO のデータ ダンプを読み取ります。ただし、数行だけロールダウンすると、Macbook の速度が低下します。これは、データを読み取るためのより効率的な方法が必要であることを示唆しています。

私はMySQLをほとんど知りません。ファイルは .xml 形式です。現時点では、.xml でデータを読み取るのはかなり困難です。xml ファイルを MySQL に変換してからファイルを読み取る方が効率的かもしれません。そのようなアクションについては、MS db -tool しか知りません。ただし、別のツールも知りたいです。

問題

  1. MySQL が理解できるように .xml を SQL クエリに解析します。データのデータ構造を知る必要があります。
  2. MySQL でデータを実行するには
  3. データを効果的に読み取ることができる MS db -tool に似たツールを見つける

SO のデータ ダンプを効果的に読み取る方法を教えてください。

--

[編集]

  1. ターミナルでデータベースを作成するために523 の SQL クエリを実行するにはどうすればよいでしょうか? 現時点では、テキストファイルにコマンドがあります。
  2. データベースで [リカバリ モード] を単純なリカバリ モードに切り替えるにはどうすればよいですか?
4

1 に答える 1

2

それらを読み取り、mysql で使用する SQL 挿入ステートメントを出力する初めての Python プログラムを作成しました (見苦しいですが、機能しました)。最初に手動でテーブルを作成する必要があります。

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 に答える