【问题标题】:PyMySQL: Query with large number of rows failingPyMySQL:查询大量行失败
【发布时间】:2012-10-21 13:20:40
【问题描述】:

我正在使用 PyMySQL 执行一个非常简单的查询:

SELECT `id` FROM `records` ORDER BY `id` DESC

records 中有超过 150 万行。 id 是主键。

这是 PyMySQL 的限制吗?如果我一次查询这么多行,还有什么我应该使用的吗?

【问题讨论】:

  • 它在大约 2 分钟后抛出异常,说连接失败。
  • 请注意,它仍然适用于较小的查询(例如,500k 行)。所以这与 150 万行有关。
  • 我认为下面的 nathans 回答可能是最正确的……您是在查询本地主机吗?或远程服务器?他们可能有持久连接超时

标签: python mysql pymysql


【解决方案1】:

您可以将查询分解为几个较小的查询:

from math import ceil

batch_size = 1000

for start_at in range(int(ceil(total_rows / 1000 * 1.0))):
    sql = 'SELECT `id` from `RECORDS` ORDER BY `id` DESC LIMIT %i, %i'
    sql = sql % (start_at * batch_size, batch_size)
    # fetch rows

【讨论】:

  • 这正是我目前所采用的。有没有一种不那么hacky的方法呢?肯定有一种方法可以通过单个查询来完成吗?
  • 可能是数据库正在终止任何打开时间超过 2 分钟的查询。如果是这种情况,那么您将不得不修改您的 MySQL 配置。我会看看使用不同的 mysql 包(如 mysql-python)会发生什么。您也可以尝试使用游标。
  • 有趣的是,当我输入“SHOW VARIABLES LIKE 'wait_timeout';”时在 MySQL 中,它给出 7800,这至少是几个小时......
  • 检查所有超时变量,使用LIKE '%timeout%'net_write_timeout 的值是多少?
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2021-10-02
  • 2021-08-15
  • 2019-11-15
  • 2016-08-29
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多