我有一个很大的表,需要处理其中的所有行。我总是收到丢失连接的消息,并且我无法重新连接并将光标恢复到上次的位置。这基本上就是我这里的代码:
#
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 <module>
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
#你有什么想法吗?
发布于 2009-12-11 07:42:00
mysql文档中有一整页专门介绍这个错误:http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
值得注意的是
警告您可以通过使用--
中记录一些断开连接的错误
发布于 2013-05-09 12:16:54
扩大mysql服务器的max_allowed_packet有三种方式:
max_allowed_packet=64M中的/etc/mysql/my.cnf并重启服务器connection.execute('set max_allowed_packet=67108864')发布于 2013-08-12 15:11:43
对于派生子进程的应用程序,您也可能会遇到此错误,所有这些应用程序都尝试使用与MySQL服务器的相同连接。这可以通过对每个子进程使用单独的连接来避免。
叉子可能会撞到你。不过,在这种情况下可不要这样做。
https://stackoverflow.com/questions/1884859
复制相似问题