MySql连接器在Python中死亡

时间:2012-10-24 08:59:07

标签: python mysql mysql-connector-python

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

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

除非print()每次迭代的结果(既愚蠢又耗时),否则会出现以下错误:

  

引发errors.InterfaceError(错误= 2013)   mysql.connector.errors.InterfaceError:2013:与MySQL失去联系   查询期间的服务器

有什么想法吗?

这段代码很简单:

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()

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

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

所以解决方案似乎是:

pip install --upgrade mysql-connector-python

您可能需要使用sudo。

答案 2 :(得分: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 agregator,看看是否能解决您的问题。当然,您需要确保您的结果是一样的。我建议你在一个你知道唯一的表值上做一个GROUP BY。