我有一个巨大的表,我需要处理其中的所有行。我总是收到此“丢失的连接”消息,并且无法重新连接并将光标恢复到原来的位置。这基本上是我在这里的代码:
import MySQLdb
class DB: conn = None
def connect(self): self.conn = MySQLdb.connect('hostname', 'user', '*****', 'some_table', cursorclass=MySQLdb.cursors.SSCursor)
def query(self, sql): try: cursor = self.conn.cursor() cursor.execute(sql) except (AttributeError, MySQLdb.OperationalError): self.connect() cursor = self.conn.cursor() cursor.execute(sql) return cursor
db = DB() sql = "SELECT bla FROM foo" data = db.query(sql)
for row in data: do_something(row)
但是我总是这样:
Traceback (most recent call last): File "teste.py", line 124, in run() File "teste.py", line 109, in run for row in data: File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 417, in next row = self.fetchone() File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 388, in fetchone r = self._fetch_row(1) File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 285, in _fetch_row return self._result.fetch_row(size, self._fetch_type) _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') Exception _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') in <bound method SSCursor. del of <MySQLdb.cursors.SSCursor object at 0x7f7e3c8da410>> ignored
你有什么主意吗?
mysql文档有专门针对此错误的整页内容:http : //dev.mysql.com/doc/refman/5.0/en/gone-away.html
值得注意的是
如果您向服务器发送不正确或太大的查询,您也会收到这些错误。如果mysqld收到的数据包太大或顺序混乱,则认为客户端出了点问题,并关闭了连接。如果需要大型查询(例如,如果使用大型BLOB列),则可以通过设置服务器的max_allowed_packet变量来增加查询限制,该变量的默认值为1MB。您可能还需要增加客户端上的最大数据包大小。有关设置数据包大小的更多信息,请参见第B.5.2.10节“数据包太大”。
通过使用--log-warnings = 2选项启动mysqld,可以获得有关丢失的连接的更多信息。这会将一些断开连接的错误记录在hostname.err文件中来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。