IT技术互动交流平台

EXPLAIN语句对于MySQLdb捕获异常的影响

来源:IT165收集  发布日期:2014-03-05 21:05:32

想在线检查MySQL SQL语句是否存在错误,但又不想实际的执行SQL语句,自然而然的想到了在SQL语句前添加EXPLAIN关键字,之后再来运行检测。在mysql客户端对于表不存在,关键字错误这样的语法错误以及函数不存在列名不存在这样的语义错误均可以有效报出。然而当使用MySQLdb客户端工具连接MySQL执行加了EXPLAIN关键字的SQL语句后在try...except...语句中只能捕获到语法错误(syntax error),而捕获不到列名不存在、函数不存在这样的错误。这一点要注意。

比如在mysql客户端,添加explain和不添加explain执行的结果是一样的对于包含错误的语句报出同样的错误信息。

然而在SQL语句前添加了EXPLAIN关键字后下面的代码却只能捕获到严格意义上的语法错误,对于函数不存在、列名不存在这样的错误不能捕获到,必须实际执行语句本身才可以。

 

import MySQLdb
from warnings import filterwarnings
filterwarnings('error', category = MySQLdb.Warning)
def checkSqlError(sql, conn, cursor):
    sqlSyntaxProblem={}
    sqlSyntaxProblem['warning']=''
    sqlSyntaxProblem['error']=''
    sqlWarning = ''
    sqlError = ''
    try:
        cursor.execute(sql)
        result = cursor.fetchall()
        conn.rollback()
    except MySQLdb.Warning, w:
        sqlWarning =  "Warning:%s" % str(w)
    except MySQLdb.Error, e:
        sqlError =  "Error %d:%s" % (e.args[0], e.args[1])
    if sqlWarning:
        sqlSyntaxProblem['warning']= sqlWarning
    if sqlError:
        sqlSyntaxProblem['error']= sqlError
    return sqlSyntaxProblem

 

延伸阅读:

  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规