2014-01-23 32 views
0

我想要在MySQL中插入60K行,但這個需要10分鐘最好的方式來完成蟒蛇插入在MySQL 60K行

for obj in parsed_objs: 
    key = 'randomstring' 
    mysqlc.execute(""" 
     REPLACE INTO infos 
      (`key`, `value`) 
     VALUES 
      (%(key)s, %(value)s) 
    """, {'key':key, 'value':obj['val']}) 
mysqlc.connection.commit() 

做這個工作要做到這一點的好辦法?

當我運行的commit(),腳本運行分離查詢或合併呢?

也許是個好主意應該建立這樣一個獨一無二的字符串?

insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_2); 
+0

你看着「LOAD DATA INFILE」? – user2370125

+0

是的,這是另一種選擇,我會嘗試 – user3175226

回答

2

如果可能的話,你會更好使用LOAD DATA INFILE ...語句在SQL批量裝載數據。這將避免創建大量單獨的查詢來加載每行數據。

在你張貼,你會產生每個要加載的數據行的一個查詢碼。 commit()只是提交事務,包含事務啓動後的所有查詢。

如果你一定要做到這一點在Python中,你可以嘗試使用executemany,這樣的事情:

db = MySQLdb.connect(host="your_host", user="your_user", passwd="your_password", db="your_database") 
write_cursor = db.cursor() 
write_list = [] 
for obj in parsed_objs: 
    key = 'randomstring' 
    write_list.append((key,obj[key])) 

sql = "REPLACE INTO infos (`key`, `value`) VALUES (%s, %s)" 
write_cursor.executemany(sql, write_list) 
db.commit() 
+0

太棒了!這使得在不到10秒的時間內插入50k。謝謝! – user3175226