2014-01-23 31 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