Skip to main content
 首页 » 编程设计

python之通过python中的Mysqldb查询抛出的异常。它直接在mySQL上执行

2025年05月04日16zlslch

我正在尝试调用一个函数来执行查询:

def run(self,query):        
        try: 
            self.cursor = self.conn.cursor () 
            self.cursor.execute(query) 
        except MySQLdb.Error, e: 
            logger.info( "Run function with query: %s Error %d: %s" % (query,e.args[0], e.args[1])) 
        except: 
            logger.info( "Errorin Run function with query %s" % (query)) 

此函数适用于大多数查询。

我正在尝试运行一个查询:

insert into NewBooks (title,WikiLink) values 
   ('Five Point Someone – What not to do at IIT!', 
    'http://en.wikipedia.org/wiki/Five Point Someone – What not to do at IIT!') 

此查询抛出异常,输出为 Errorin Run function with query %s"% (query) 回溯错误: 错误:我得到的是 UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 120: ordinal not in range(256)

当我复制并在 Mysql 命令行上运行时,它起作用了。有人可以向我解释可能出了什么问题吗?

请您参考如下方法:

您在该查询中有一些特殊字符,并且您的默认语言环境是 latin-1 (iso-8859-1)。当 python 尝试打印出错误消息并包含您的查询时,它无法将您的 unicode 对象编码为字节(它必须这样做,因为您只能通过管道发送字节,而不是代码点)。

您可以尝试使用支持 utf-8 的终端运行,确保您的区域设置是 utf-8 友好的,或者明确指定您希望如何对查询数据进行编码以输出。

一个好的快速更改是在该行上使用 %r 而不是 %s。

logger.info( "Errorin Run function with query %r" % (query,)) 

这只会以一种您可以将其粘贴回 Python 的方式显示查询对象,因此特殊字符将被转义。

另外,通过用一个简单的“except”捕获所有内容,您正在吞下应该显示的实际错误。你真的应该要么把它拿出来让 Python 给你显示回溯本身,要么把

import traceback 
traceback.print_exc() 

在最后一个光秃秃的 except: 下。