一、前言

最近在运行python脚本的时候,经常出现:mysql server has gone away的错误,导致脚本停止运行。只是代码里面明明已经使用try: except 这种方式来捕获mysql错误了,用的方法是:MySQLdb.ProgrammingError,但是毛用没用。 很好,很强大,那么咱们就来研究下这到底是怎么回事。

捕获代码:

try:cursor.execute(sql)
except MySQLdb.ProgrammingError,e:print e

打印不出来任何东西,直接脚本就停了,报错:mysql server has gone away

二、MySQLdb到底该如何获取mysql错误

既然MySQLdb.ProgrammingError这种方式获取不了mysql报错,那么会不会是用错方法了呢?而且这个MySQLdb.ProgrammingError到底获取的是什么错误,博主也不是很清楚,只知道要用它来捕获错误。既然如此,咱们百度下还有没有其他的方案。

1、网上的方案(亲测可用)

 try:conn.ping()         # 尝试数据库重新连接,conn是数据库连接对象,不是cursor对象
except MySQLdb.Error, e:        # 捕获到错误则打印错误,打印出来的是个数组形式的,可用e[0],e[1]来获取print 'error'print e

参考: https://blog.csdn.net/zyz511919766/article/details/20546237

打印结果:

error
(2013, 'Lost connection to MySQL server during query')

虽然成功捕获了错误,但是为何MySQLdb.ProgrammingError捕获不到呢,为啥代码里用的都是MySQLdb.ProgrammingError呢?很好奇区别到底在哪里。

2、关于MySQLdb.ProgrammingError

网上查询到了Mysqldb的手册,才知道原来获取mysql错误的方法还是挺多的。比如这个MySQLdb.ProgrammingError,这个捕获的主要是sql的错误,一般是编程错误会引发此异常,例如,当您的SQL中存在语法错误或未找到表时。

那就怪不得捕获不到mysql的连接上的错误了,这个方法主要捕获sql语句的错误,算是mysql内部的方法,相当于是在连接无误的基础上,捕获sql执行的错误。

关于MySQLdb的相关函数,可以参考手册:
MySQLdb的手册

3、常用的方法如下

MySQLdb.DataError
基数: _mysql_exceptions.DatabaseError因处理的数据问题(例如被零除,数值超出范围等)引起的错误引发异常。异常MySQLdb.DatabaseError
基数: _mysql_exceptions.Error与数据库相关的错误引发异常。异常MySQLdb.Error
基数: _mysql_exceptions.MySQLError异常是所有其他错误异常的基类(不是警告)。异常MySQLdb.ProgrammingError
基数: _mysql_exceptions.DatabaseError因编程错误而引发的异常,例如,找不到或已经存在表,SQL语句中的语法错误,指定的参数数量错误等。

我们这里使用的是MySQLdb.Error来捕获错误,相当于是所有的异常,自然是也能捕获到数据库连接失败的错误了。

4、Mysqldb捕获连接错误方法

回到原来的问题上,我们需要捕获的是mysql server has gone away错误,那么需要的方法如下:

异常MySQLdb.OperationalError
基数: _mysql_exceptions.DatabaseError因与数据库操作相关且不一定在程序员控制下的错误而引发的异常,例如,发生意外的断开连接,
找不到数据源名称,无法处理事务,在处理期间发生内存分配错误,等等。

使用这个方法可以直接捕获到断开连接的错误,不管是Lost connection to MySQL server during query 还是mysql server has gone away都当做是断开连接错误,只要捕获到该错误,直接重连即可。

有事没事,多翻手册,果然是有道理的。

end

python怎么捕获mysql报错相关推荐

  1. python连接数据库mysql失败_解决python连接mysql报错问题

    解决python连接mysql报错问题 最近跑python脚本时遇到一个问题,当sql语句中有中文时,执行python脚本报以下错误: Traceback (most recent call last ...

  2. python 连接mysql报错:mysql.connector.errors.NotSupportedError: Authentication plugin ‘caching_sha2_passw

    python 连接mysql报错:mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_passw ...

  3. Python连接mysql报错Traceback (most recent call last):   File “D:/…….py“, line 6, in <module> passwd

    通过下载的解压缩包安装完Mysql后安装 MySQL 驱动程序 MySQL 驱动程序用来访问 MySQL 数据库. 可以使用 PIP 安装 "MySQL Connector". P ...

  4. 完美解决python manage.py makemigrations 报错

    pycharm界面下面的Terminal里执行 1 python manage.py makemigrations app(你所创建的app名字) 2 python manage.py migrate ...

  5. Django连接Mysql报错:ModuleNotFoundError: No module named 'MySQLdb'

    Django连接Mysql报错 环境:Django_1.11.8 与 Python_3.6 ModuleNotFoundError: No module named 'MySQLdb' django. ...

  6. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  7. Django >python manage.py migrate报错:(1064, “You have an error in your SQL syntax

    执行如下命令时报错(迁移数据库和表结构): python manage.py makemigrations python manage.py migrate 报错信息: django.db.migra ...

  8. mysql 报错 get error 28 from storage engine 解决方法

    mysql 报错 get error 28 from storage engine 解决方法 参考文章: (1)mysql 报错 get error 28 from storage engine 解决 ...

  9. Mysql报错Fatal error:Can't open and lock privilege tables

     Mysql报错Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 安装mysql后 ...

最新文章

  1. JavaScript实现permutate Without Repetitions无重复排列算法(附完整源码)
  2. 基于嵌入式linux和s32410平台的视频采集
  3. MySQL之——The slave I/O thread stops because master and slave have equal...
  4. 本周四直播预告(内含福利)丨 经典知识库:MGR原理介绍与案例分享
  5. 计算机桌面图标教案,计算机教案模板
  6. CentOS配置ssh无密码登录的注意点
  7. Netty工作笔记0037---主从Reactor多线程
  8. 当联邦学习碰上老虎机
  9. C/C++ volatile
  10. 机器学习中最重要的公式——贝叶斯公式
  11. windows10用户密码获取
  12. n维椭球体积公式_钻井常用单位换算及计算公式
  13. 宇宙中最恐怖的行星之索伦之眼—北落师门b
  14. OctetString 转String
  15. SpringSecurity之CSRF漏洞保护
  16. 第三代大数据处理方案Flink
  17. 用python自动发微博
  18. Gitlab与Jaeger集成,实现Tracing链路追踪
  19. 深度学习模型压缩与优化方法
  20. vue2_路由03_路由传参

热门文章

  1. 散列表的设计与实现_python基础之字典与集合实现
  2. 多线程Java Socket编程示例
  3. python dll 变量
  4. wfs.js 多路视频 串屏 闪烁
  5. linux环境下 PYTHONPATH添加
  6. 'avpicture_fill': 被声明为已否决
  7. 组播基本概念、IGMP、IGMP监听学习笔记
  8. c语言合法的数据类型关键字有哪些,C语言提供的合法的数据类型关键字是_________....
  9. gitlab合并分支后需要提交吗_阿里前端,如何基于 GitLab 进行「自动化」构建及发布...
  10. mysql 存储过程 定时_MySQL存储过程和定时任务