我正在尝试在 mysql 中插入 60k 行,但这需要 10 分钟才能完成
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);
最佳答案
如果可能的话,最好使用 SQL 中的 LOAD DATA INFILE... 语句来批量加载数据。这将避免创建大量单独的查询来加载每行数据。
在您发布的代码中,您将为要加载的每一行数据生成一个查询。 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()
关于python 在mysql中插入60k行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298826/