编辑: 这个问题令人难以置信。我现在设法用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()
答案 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。