2012-01-20 16 views
0

私はキーでアクセスするxx.dbファイルを持っており、キーを画面に印刷して確認します。多くのレベルのキーがあります。私はここでトップレベルを示しています。MySQLテーブルにdbファイルを設定する

for filename in filenames: 
     with contextlib.closing(shelve.open(filename, flag = "w")) as data:  
prdata = data['all'].keys() 

印刷PRDATA 私はPythonで、このように作成した表があります。

tbl= """CREATE TABLE IF NOT EXISTS table2 (
     `class` varchar(30) default NULL, 
     `name` varchar(120) default NULL, 
     )""" 
cursor.execute(tbl) 

私が作成したのMySQLdbに(.DBファイルから)データの最初のコレクションの出力をロードしたいと思いますが表。私はどのように進めるべきですか? まず、dbファイルからテキストファイルを作成する必要がありますか? 私は、LOAD DATA INFILEは、テキストファイルからデータベースにデータを高速にロードする方法であることを読んでいます。 dbには多くのデータがあるので、まずテキストファイルを作成するのをスキップできれば速くなります。

編集: これを試してみましたが、構文エラーが表示されます。「あなたのMySQLサーババージョンに対応するマニュアルをチェックしてください。正しい構文はprdata INTO TABLEテーブル2近くで使用してください。\ n \ t 。 '' 'BY TERMINATED FIELDS 私はPythonで、それを囲む方法も正しく構文のドキュメントを理解していないファイル名にファイル名の

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' 
    [REPLACE | IGNORE] 
    INTO TABLE tbl_name 
    [CHARACTER SET charset_name] 
    [{FIELDS | COLUMNS} 
     [TERMINATED BY 'string'] 
     [[OPTIONALLY] ENCLOSED BY 'char'] 
     [ESCAPED BY 'char'] 
    ] 

を:。contextlib.closingと (shelve.open(ファイル名、フラグ= "w"))としてデータ:
prdata = data ['all']。keys( ) "TABLEテーブル2 INTO LOAD DATAのINFILEのPRDATA '' BY TERMINATED FIELDS "

cursor.execute( """")

更新:)表2(クラス、名前INTO INSERTで行くことにしましたあなたが同様のpythonから読み込みを行うことができます

答えて

0

正常に動作します VALUE(%sの%sの):

cursor.executemany(
     """INSERT INTO table2 (class, name) 
     VALUES (%s, %s)""", 
     [ 
     ("class1", "name1"), 
     ("class2", "name2"), 
     ("class3", "name3") 
     ]) 

ドキュメントhttp://mysql-python.sourceforge.net/MySQLdb.html

+0

確かに、しかし、実際のデータは、.DBファイルに存在します。だから私は手動で "class1"、 "name1"などを挿入するのではなく、それを引き出すことを望んでいました。 – Tom

1

接続が作成されると、local_infileパラメータに

connection = MySQLdb.connect(host="localhost", user="appuser", passwd="", 
db="test", local_infile = 1) 

を追加することを忘れないでくださいそれ以外の場合は、このエラーが表示されます。

ERROR 1148 (42000): The used command is not allowed with this MySQL version 
関連する問題