gpt4 book ai didi

python - 为什么mysql connector break ("Lost connection to MySQL server during query"错误)

转载 作者:IT老高 更新时间:2023-10-29 00:07:06 28 4
gpt4 key购买 nike

当我运行大型查询(返回许多行的查询)时,我得到 Lost connection to MySQL server during query 错误,我看不到我做错了什么。我使用来自 mysql.com 的"new"mysql 驱动程序(不是“旧”MySQLdb),以及与 MAMP 捆绑在一起的 mysql 版本。 python 2.7。表未损坏,analyze table nrk2013b_tbl; 返回状态正常。这是一个打破的例子:

#!/usr/bin/python2.7
# coding: utf-8

import sys
import mysql.connector # version 2.0.1

connection = mysql.connector.connect(
unix_socket="/Applications/MAMP/tmp/mysql/mysql.sock",
user="dbUsernam",
passwd="dbUserPassword",
db="nrk",
charset = "utf8",
use_unicode = True)
cur = connection.cursor()
cur.execute("USE nrk;")


sql = """SELECT id FROM nrk2013b_tbl WHERE main_news_category = 'Sport'"""
cur.execute(sql)
rows = cur.fetchall()

print rows

sys.exit(0)

这导致我大部分时间都得到错误:

Traceback (most recent call last):
File "train_trainer_test.py", line 20, in <module>
remaining_rows = cur.fetchall()
File "/Library/Python/2.7/site-packages/mysql/connector/cursor.py", line 823, in fetchall
(rows, eof) = self._connection.get_rows()
File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 669, in get_rows
rows = self._protocol.read_text_result(self._socket, count)
File "/Library/Python/2.7/site-packages/mysql/connector/protocol.py", line 309, in read_text_result
packet = sock.recv()
File "/Library/Python/2.7/site-packages/mysql/connector/network.py", line 226, in recv_plain
raise errors.InterfaceError(errno=2013)
mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

第 20 行是 rows = cur.fetchall()

如果我将查询限制为产生更少的结果 SELECT id FROM nrk2013b_tbl WHERE main_news_category = 'Sport' LIMIT 10 一切都很好。但我确实想使用更大的结果集。对于一些临时问题解决,我已经移动了限制并将我想要的数据分解成更小的批处理,但这一直作为一个问题出现。

为了考虑连接超时和 max_allowed_pa​​cket 等,我有这个 my.cnf 文件:File:/Applications/MAMP/conf/my.cnf

[mysqld]
max_allowed_packet = 64M
wait_timeout = 28800
interactive_timeout = 28800
connect-timeout=31536000

这似乎没有任何区别(我什至不确定 mysql 是否识别这些设置)。当我从终端或 Sequel Pro 运行查询时,它工作正常。只有通过 python mysql.connector 我得到这些错误。

有什么想法吗?

PS:我暂时放弃了这个,改用 PyMySQL 而不是 Oracle mysql.connector。通过更改为这个,问题似乎消失了(我自己断定问题出在 oracle mysql 连接器中)。

import pymysql
conn = pymysql.connect(
unix_socket="/Applications/MAMP/tmp/mysql/mysql.sock",
user="dbUsernam",
passwd="dbUserPassword",
db="nrk",
charset = "utf8",
use_unicode = True)
conn.autocommit(True)
cur = conn.cursor()

最佳答案

我还不得不切换到 PyMySQL。我正在运行 pip 1.5.6、Python 2.7.8,并尝试使用 mysql-connector 2.0.1

我能够从 Sequel Pro 中毫无问题地运行查询,但我的 Python 查询在仅返回结果子集后会失败并出现问题中描述的错误。

切换到 PyMySQL,一切按预期工作。

https://github.com/PyMySQL/PyMySQL

在虚拟环境中:

pip install pymysql

在代码中:

import pymysql

connection = pymysql.connect(user='x', passwd='x',
host='x',
database='x')

cursor = connection.cursor()

query = ("MYQUERY")

cursor.execute(query)

for item in cursor:
print item

绝对是 mysql-connector-python 中的错误。

关于python - 为什么mysql connector break ("Lost connection to MySQL server during query"错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510114/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com