mysql - 捕获/处理 django.db.utils.OperationalError(2013,与服务器的连接丢失)后无法关闭和重新打开 MySQL 连接
问题描述
我得到一个django.db.utils.OpertionalError: (2013, Lost connection to MySQL Server)
. 原因是因为MAX_TIMEOUT
设置为 90 秒。我正在尝试捕获错误,关闭 bade 连接并进行新的查询。我认为以下 try/except 块会捕获错误,关闭连接并再次尝试相同的查询:
try:
sku = SkuLight.objects.filter(expansion=card_set).filter(name=card_name)
except OperationalError as e:
print(e)
connection.close()
sku = SkuLight.objects.filter(expansion=card_set).filter(name=card_name)
我没有正确关闭连接吗?如果没有,我怎样才能以正确的方式关闭和重新打开连接。谢谢。
这是完整的回溯:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
return self.cursor.execute(query, args)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 247, in execute
res = self._query(query)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 374, in _do_query
db.query(q)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\connections.py", line 277, in query
_mysql.connection.query(self, query)
_mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\fbchat\client.py", line 2295, in _parseMessage
thread_id=thread_id, thread_type=thread_type, ts=ts, metadata=metadata, msg=m)
File "C:\Users\Jup\Alpha\customer\facebook_listen.py", line 54, in onMessage
if not sku.exists():
File "C:\Program Files\Python36\lib\site-packages\django\db\models\query.py", line 715, in exists
return self.query.has_results(using=self.db)
File "C:\Program Files\Python36\lib\site-packages\django\db\models\sql\query.py", line 509, in has_results
return compiler.has_results()
File "C:\Program Files\Python36\lib\site-packages\django\db\models\sql\compiler.py", line 1032, in has_results
return bool(self.execute_sql(SINGLE))
File "C:\Program Files\Python36\lib\site-packages\django\db\models\sql\compiler.py", line 1063, in execute_sql
cursor.execute(sql, params)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 100, in execute
return super().execute(sql, params)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python36\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python36\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
return self.cursor.execute(query, args)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 247, in execute
res = self._query(query)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\cursors.py", line 374, in _do_query
db.query(q)
File "C:\Program Files\Python36\lib\site-packages\MySQLdb\connections.py", line 277, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query')
解决方案
推荐阅读
- python - PyInstaller 应用程序在使用 pyQode 时不断打开自身
- php - 如何在 Laravel 中使用多表查询而不使用 Eloquent 关系
- javascript - 在Javascript中单击按钮时更改边框高度
- swift - 用户滚动到底部后,仅在新行重新加载 TableView
- html - 带有过渡的 2 个图像的对角分割
- python - 以 UTF-8 写入 txt 文件 - Python
- mysql - 无法添加外键约束错误1215 HY000
- javascript - 我的页面不会使用函数重定向到 url
- ssl - Traefik:使用默认证书时日志中的“无需为域生成 ACME 证书”
- javascript - 登录按钮不断刷新页面