优雅的关闭mysql_优雅地处理“MySQL已经消失”

博主正在编写一个Python小型数据库适配器,遇到MySQL连接因wait_timeout超时而断开的问题。尝试捕获OperationalError并重新建立连接,但在实际运行中仍无法正常执行查询。问题可能与MySQLdb的连接管理有关。
摘要由CSDN通过智能技术生成

我正在用Python编写一个小型数据库适配器,主要是为了好玩。我正试图让代码从MySQL连接“消失”的情况中优雅地恢复,也就是说,超过了wait_timeout。我已经将wait_timeout设置为10,所以我可以试试这个。

这是我的代码:def select(self, query, params=[]):

try:

self.cursor = self.cxn.cursor()

self.cursor.execute(query, params)

except MySQLdb.OperationalError, e:

if e[0] == 2006:

print "We caught the exception properly!"

print self.cxn

self.cxn.close()

self.cxn = self.db._get_cxn()

self.cursor = self.cxn.cursor()

self.cursor.execute(query, params)

print self.cxn

return self.cursor.fetchall()

接下来我等了十秒钟,试着提出请求。以下是切里皮的长相:[31/Dec/2009:20:47:29] ENGINE Bus STARTING

[31/Dec/2009:20:47:29] ENGINE Starting database pool...

[31/Dec/2009:20:47:29] ENGINE POOL Connecting to MySQL...

[31/Dec/2009:20:47:29] ENGINE POOL Connecting to MySQL...

[31/Dec/2009:20:47:29] ENGINE POOL Connecting to MySQL...

[31/Dec/2009:20:47:29] ENGINE POOL Connecting to MySQL...

[31/Dec/2009:20:47:29] ENGINE POOL Connecting to MySQL...

[31/Dec/2009:20:47:29] ENGINE Started monitor thread '_TimeoutMonitor'.

[31/Dec/2009:20:47:29] ENGINE Started monitor thread 'Autoreloader'.

[31/Dec/2009:20:47:30] ENGINE Serving on 0.0.0.0:8888

[31/Dec/2009:20:47:30] ENGINE Bus STARTED

We caught the exception properly! <====================================== Aaarg!

[31/Dec/2009:20:48:25] HTTP Traceback (most recent call last):

File "/usr/local/lib/python2.6/dist-packages/CherryPy-3.1.2-py2.6.egg/cherrypy/_cprequest.py", line 606, in respond

cherrypy.response.body = self.handler()

File "/usr/local/lib/python2.6/dist-packages/CherryPy-3.1.2-py2.6.egg/cherrypy/_cpdispatch.py", line 25, in __call__

return self.callable(*self.args, **self.kwargs)

File "adp.py", line 69, in reports

page.sources = sql.GetSources()

File "/home/swoods/dev/adp/sql.py", line 45, in __call__

return getattr(self.formatter.cxn, parsefn)(sql, sql_vars)

File "/home/swoods/dev/adp/database.py", line 96, in select

self.cursor.execute(query, params)

File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute

self.errorhandler(self, exc, value)

File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler

raise errorclass, errorvalue

OperationalError: (2006, 'MySQL server has gone away')

[31/Dec/2009:20:48:25] HTTP

Request Headers:

COOKIE: session_id=e14f63acc306b26f14d966e606612642af2dd423

HOST: localhost:8888

CACHE-CONTROL: max-age=0

ACCEPT: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

ACCEPT-CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3

USER-AGENT: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.43 Safari/532.5

CONNECTION: keep-alive

Remote-Addr: 127.0.0.1

ACCEPT-LANGUAGE: en-US,en;q=0.8

ACCEPT-ENCODING: gzip,deflate

127.0.0.1 - - [31/Dec/2009:20:48:25] "GET /reports/1 HTTP/1.1" 500 1770 "" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.43 Safari/532.5"

为什么这不管用??很明显,我捕捉到了异常,重新生成连接和游标,但仍然不起作用。它与MySQLdb如何获得连接有关吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值