2017-03-27 9 views
0

私は100万レコードのCSVファイルを持っていますが、私は22分かかる単列の挿入を使用しています load data infileを使うと60秒かかりますセキュリティ目的) 他のオプションは、複数の挿入または多数の実行です 複数の挿入を使用する方法、forループを使用して多くを実行する方法が混乱します.Iカウンタが一度に100行をチェックし、 100行と、ファイルの終わりまで、私は行数をチェックし、1で割ったシエルを使用していますアドバンスmysqlのpythonに複数の挿入を含むcsvファイルを挿入します

#!/usr/bin/env python 
import csv 
import MySQLdb 
import pysftp 
import smtplib 

#connection to 
conn = MySQLdb.connect(host="xxxxx", # The Host 
         user="file_auto_proc", # username 
         passwd="[email protected]!", # password 
         db="xxxxx") # name of the data base 

x = conn.cursor() 
try: 
    csv_data = csv.reader(file('Disc.csv')) 
    for row in csv_data: 

     x.execute("INSERT INTO fp_feed_stg (col1,col2) VALUES(%s, %s)", row) 
    conn.commit() 


except Exception, e: 
    print repr(e) 
    print("Not inserted") 



conn.close() 
+1

あなたはプログラムでpythonを使用する必要がありますか? MySQLは、mysqlシェルを使用してcsvファイルを読み取ることができます。おそらくこれをbashスクリプトに変換し、代わりにmysqlシェルを使用してください。 –

答えて

0

で 感謝を挿入00とforループの範囲を指定します(私はこのコードでこの条件を表示しませんでした)

#!/usr/bin/env python 
import csv 
import MySQLdb 
import pysftp 
import smtplib 
import itertools 

#connection to 
conn = MySQLdb.connect(host="xxx.xx.xxxxx.com", # The Host 
         user="xxxx", # username 
         passwd="[email protected]!", # password 
         db="xxxx") # name of the data base 

x = conn.cursor() 


csv_data = csv.reader(file('Disc1.csv'))  
a=[]  
i=0 
k=0 

for i in range(0,200):  
    for row in itertools.islice(csv_data, k, k+100): 
     a.append(row) 
     print row 
     print k 
    print k 

     sql="INSERT INTO fp_stg (col1,col2,col3,col4,col5,col6) VALUES(%s, %s, %s,%s, %s, %s)" 
    number_of_rows = x.executemany(sql, a) 
    a=[] 
    conn.commit() 

#print i 
関連する問題