6

编辑:这个问题令人难以置信。我现在已经设法用 time.sleep(0.01) 替换了一个烦人的打印功能,但是为什么我应该从更慢的执行时间中受益,这超出了我的理解。

我在 Python 3.23 的 MySQL 1.0.7 连接器中迭代光标时遇到问题。

除非 print() 每次迭代的结果(这既愚蠢又耗时)我得到以下错误:

raise errors.InterfaceError(errno=2013) mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

有什么想法吗?

到目前为止,代码很简单:

self.config = {'user': user,'password': password,'host': host,'database':     
database,'raise_on_warnings': True}

self.data = []
self.clickcnx = mysql.connector.connect(**self.config)
self.clickcursor = self.clickcnx.cursor()

query = "SELECT table1, table2, table3 FROM `db`-tables;"
self.clickcursor.execute(query)
for item in self.clickcursor:
  print(item)     #this is the strange line that I need!
  self.data.append(item)
self.clickcnx.close()
4

3 回答 3

1

您错过了实际获取结果的部分,您只是跨过光标。

试试这个版本:

query = "SELECT table1, table2, table3 FROM `db`-tables;"
self.clickcursor.execute(query)
results = self.clickcursor.fetchall()
for item in results:
  print(item)     #this is the strange line that I need!
  self.data.append(item)
self.clickcnx.close()
于 2012-10-24T09:28:23.943 回答
1

我对 1.0.7 也有同样的问题。添加 time.sleep() 修复它。然后我升级到 1.0.10 并删除了睡眠。这也很好用。

所以解决方案似乎是:

pip install --upgrade mysql-connector-python

您可能需要使用 sudo。

于 2013-06-07T06:48:03.443 回答
0

我遇到了 MySQL 连接器的问题。我尝试了 Burhan Khalid 的回答,但没有奏效。我能够通过添加 GROUP BY 语句来解决我的问题。

原始查询:

SELECT
    a.ID,
    a.UID,
    g.GroupId,
FROM Accounts a
    LEFT JOIN Profile p ON p.ID = a.ID
    LEFT JOIN Group g ON g.GroupId = p.GroupId
WHERE
    a.UID IS NOT NULL
    AND a.Active = 1
    AND a.Type = 1;

返回与原始结果相同的查询:

SELECT
    a.ID,
    a.UID,
    g.GroupId,
FROM Accounts a
    LEFT JOIN Profile p ON p.ID = a.ID
    LEFT JOIN Group g ON g.GroupId = p.GroupId
WHERE
    a.UID IS NOT NULL
    AND a.Active = 1
    AND a.Type = 1
GROUP BY
    a.UID;

唯一的区别是第二个查询不会引发 InterfaceError(2013)。我的查询返回大约 250,000 行。我对这些查询中的每一个都进行了解释,令我惊讶的是,第二个查询比第一个查询花费了更长的时间(持续时间),因为它将结果存储在一个临时表中,但获取时间从 6.00 秒变为 0.50 秒!

尝试添加 GROUP BY 聚合器,看看是否能解决您的问题。当然,您需要确保您的结果是相同的。我建议对您知道将是唯一的表值进行 GROUP BY。

于 2015-02-19T22:06:03.563 回答