【问题标题】:Fast updating MySQL Table based on NumPy Array基于 NumPy Array 的 MySQL 表快速更新
【发布时间】:2021-10-11 00:59:16
【问题描述】:

大家早上好,

我希望你一切都好,并期待一个美好的周末!

我有一个 2D numpy 数组,其中包含 2 个列和大约 6000 行 [col1 = name = identifiert for where-clause ; col2 = 列 val 的值]: x = np.array([['a', '2'], ['b', '2'] , ['c', '1']])

[['a' '2']
 ['b' '2']
 ['c' '1']]

现在我需要将这些值作为更新写入 Mysql 表。目前我正在使用 for 循环遍历数组并为每个条目创建 sql-query Update [test_table] SET value = 'val' WHERE Name = 'name' 这对于少量数据可能是可以接受的,但对于大型数据集来说非常慢。

有没有办法加快速度,或者最好直接使用 numpy 数组进行更新?

【问题讨论】:

    标签: python mysql numpy sql-update mysql-python


    【解决方案1】:

    这就是executemany 的用途:

    cur.executemany( "UPDATE test_table SET value=? WHERE Name=?", x )
    

    现在,假设“值”是第一个,“名称”是第二个。您可能需要重新排列数组列以使其正常工作。

    【讨论】:

    • 非常感谢您提示使用 executemany。这似乎正是我一直在寻找的!我只有一个“小”问题:尝试使用您的建议调用它,提示错误“处理格式参数失败;Python 'str_' 无法转换为 MySQL 类型”'输入数组的形式为 0 : '0' and 1: 'test123' 更新:更正书写错误
    • 问题已解决 我在将数组转换为元组形式时遇到了问题。我使用 tuple([tuple(row) for row in VSA]) 而不是 VSA = tuple([tuple([int(row[0]), str(row[1])]) for row in VSA])跨度>
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多