python 在mysql中插入60k行的最佳方法

标签 python mysql

我正在尝试在 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/

相关文章:

mysql - 无法访问xampp服务器中的phpmyadmin数据库

php - Codeigniter 将实际行数(不限)从模型传递到 Controller

python - @timeout(timelimit) 装饰器是如何工作的?

Python 的 csv、xml 和特殊字符问题

python - 使用钩子(Hook)函数从预训练模型中提取特征

python - 这个简单的 python 元类有什么问题?

php - 更新数据时获取特定行

python - 将具有特定名称的方法添加到已创建的类实例

php - 简单 'SELECT field FROM table_name where TO = "$to"' 返回 MySQL 错误 1064

mysql - 相同的外键列引用 2 个表的 2 个单独的主键