2017-03-14 2 views
0

私は本当に面倒な日常の仕事をしています。私はデータベースにcsvシートをアップロードする必要があります。 データソースには単純な残りのAPIがあるので、JSON Urlですべてのデータを要求することができます。そのために私はJSONをラップし、すべてのデータを自分のDBに挿入する小さなpythonスクリプトを実装します。 問題は、インサートが本当に遅い(私は10分より少ないと予想していましたが)3つのホウールが壊れた後です。データのアップロードを最適化する(MySQL、Python)

db = MySQLdb.connect(host="...", # your host, usually localhost 
         user="...",      # your username 
         passwd="...",      # your password 
         db="...")      # name of the data base 
with db: 
    cur = db.cursor() 

JSONURL = URL[0][y]+URL2+URL3+URL4+URL5  
response = urllib.urlopen(JSONURL) 
data = json.loads(response.read()) 
n=len(data["results"])-1 
for z in range(0,n): 
    with db: 
      sql="INSERT INTO t_data (col1,col2,col3) VALUES("+data["results"][0]+","+data["results"][1]+","+data["results"][2]+")" 
      cur.execute(sql) 

私はMySQLを使用して見ることができるように: はここに私のコード(よりよい理解のために少し一口変化する)です。たぶん私は準備ステートメントを使用することができます(しかし、私はそれがPython上で動作するかどうかわかりません。私はそれをどうしますか?) より良いパフォーマンスを得るためにMySQLの設定を変更することは可能ですか? 私はどんな助けも楽しみにしています。

+0

なぜあなたは何度も挿入クエリの代わりに 'bulk-insert'を使うべきではありません。ここにそのリンクがありますhttps://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html –

+0

その文書はあなたを助けましたか? @nicoschuck –

+1

後半のご返答申し訳ありません。私はすぐに家にいると私はそれを試してみましょう。あなたはbuldの挿入を好むか、またはprefareがよいでしょうか?あなたの経験は何ですか?@anandtripathi – nicoschuck

答えて

1

何度も何度も挿入クエリの代わりにbulk-insertを使用しないでください。 bulk-insert