2009-08-05 11 views
0

私は過去数日間にSQLの学習を始めましたが、データをテーブルに入れようとしている間に立ち往生しています。MySQL LOAD DATA - ColumnName =値形式のテキストファイルをロード

形式のテキストファイルに格納されたデータの:

ColumnName1=SomeInteger 
ColumnName2=SomeInteger 
ColumnName3=SomeString 
... etc 

これまでのところ、私は分割することを望んおよびグループ別々だと、約150の列を有している(表を作成するために管理してきましたPythonで=SomeValueを取り除くことによって)スプレッドシートに列名をCREATE TABLEでラップします。少し面倒ですが、今のところうまくいきます。

今、私は次の点にこだわっている:(包み、それらが同じ順序で常にじゃない)私は指定された列名にデータを挿入するSQLを取得しようとしている

LOAD DATA INFILE 'path/to/file.txt' 
INTO TABLE tableName 
COLUMNS TERMINATED BY '\n' 
LINES STARTING BY '='; 

、等号を無視し、一意のファイル名をインデックスとして使用します。 また、'\='と等しい文字をエスケープしようとしました。なぜなら、MySQLのドキュメントには、LINES STARTING BYパラメータを無視する前のすべてのことが記述されているからです。 LINES STARTING BY 'ColumnName1='と入力すると、最初のインスタンスは無視されますが、それは正確には私が望むものではなく、残りの行に対しては機能しません。

誰かが正しい方向で私を指すことができる場合、私はより多くのドキュメントやチュートリアルを読んで嫌いではありません。

編集:行は次のように区切られています。私は約10万のiniファイルを与えられています。それぞれの名前はFirstName_LastName.ini(一意性が保証されています)であり、データの各行はiniファイル内に含まれています。私は21世紀にアカウント保存の古風な方法を持って来る必要があります。 MySQLのLOAD DATAは、このタイプのタスクで特に高速であると噂されています。そのため、オプションとして検討し始めました。自分のフォーマットでデータを扱うことができるかどうか、あるいは100kのファイルをすべてパーサーに入れたほうが良いのではないかと思っていました。私はこれを読んでいるマジシャンがいるなら、SQLを使う提案にはまだ開いています。

p.s:私のデータ(このテキスト形式から)を個々のテーブルに取り込む方法について誰かが良いアイディアを持っている人は、私もそれを聞いてみたいです。

+0

...あなたは、行ごとの列名と値を持つ一つのファイルがありますか?どのように行を区切りますか?率直に言えば、私は 'LOAD DATA INFILE'という形式、つまり挿入行ごとに1行、一貫した列の順序でファイルを整理することに焦点を当てます。 – stran

答えて

0

個人的には、MySQLdbモジュール(Python-mysqldbやMySQL-pythonのような名前のパッケージで利用可能です)を使って、おそらくPythonですべてのことを行うでしょう。データをタプルのリストにフォーマットしてから挿入します。 http://mysql-python.sourceforge.net/MySQLdb.htmlからの例:私は私はあなたのソースファイルがどのようなものかを理解していない

import MySQLdb 

datalist = [("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95), 
      ("Not So Much Spam Plate", 3, 2, 0, 3.95), 
      ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95)] 

db = MySQLdb.connect(user='dude', passwd='foo', db='mydatabase') 
c = db.cursor() 

c.executemany(
    """INSERT INTO breakfast (name, spam, eggs, sausage, price) 
    VALUES (%s, %s, %s, %s, %s)""", 
    datalist) 
関連する問題