【问题标题】:Django cursor.executemany what's the preferred batch size for each "executemany"Django cursor.executemany 每个“executemany”的首选批量大小是多少
【发布时间】:2021-04-13 20:54:12
【问题描述】:

我使用以下代码通过扩展“插入”进行批量插入。

    cursor = connections['default'].cursor()

    sql = "INSERT INTO %s (%s) VALUES ([xxx], [xxx], ...) "

    step = 1000
    for l in range(0, len(values), step):
        s_values = values[l:l+step]
        cursor.executemany(sql, s_values)

我的问题是我是否有很多行要插入,例如 100、000:

我应该插入一个查询吗?

或以固定步长调用多个executemany,例如1000。

看了一些文章,建议用100。

我用 100, 000 条要插入的记录来测试我的代码。

一个executemany比多个executemany快。

我不确定我应该怎么做。不知道我是否错过了这里的理解。

请帮忙评论。谢谢。

【问题讨论】:

    标签: python mysql django executemany


    【解决方案1】:

    MySQL 文档有助于详细说明:

    在大多数情况下,executemany() 方法会遍历参数序列,每次都将当前参数传递给 execute() 方法。

    对插入进行了优化:参数序列给出的数据值使用多行语法进行批处理。

    【讨论】:

    • 谢谢。我明白这一点。但是我应该将所有数据都放入一个executemany()中吗?我应该将数据分成小块以防网络包大小限制或更多数据块 MySQL 更长的时间?
    • 是的,executemany() 将找到处理您以半动态方式提供的数据量的最佳方法。只要请求的响应在数据包限制之内,您就不应该有问题,并且(除了少数例外)它应该比定时批处理执行的家庭补救措施更快,恕我直言。
    • 谢谢@Xinthral。这也是我看到的。然后我会将所有数据提供给 executemany。如果我达到限制,我可以增加 MySQL 的消息包大小。
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2020-05-20
    • 2016-02-14
    • 2021-08-27
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多