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

想在线检查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

EXPLAIN语句对于MySQLdb捕获异常的影响,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。