解决python连接mysql报错问题
admin
2023-05-18 06:42:52
0

解决python连接mysql报错问题


最近跑python脚本时遇到一个问题,当sql语句中有中文时,执行python脚本报以下错误:

Traceback (most recent call last):

  File "kpi_daily_report.py", line 356, in

    result = cal(line, sys.argv[1], sys.argv[2])

  File "kpi_daily_report.py", line 324, in cal

    result = run(sql)

  File "kpi_daily_report.py", line 49, in run

    rtn = conn31.selectall(sql)

  File "/data0/home/yangjing150/test/kpidaily222/mysql_db_connector.py", line 100, in selectall

    raise ex;

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 204-206: ordinal not in range(256)


经过查询与测试,下面三点可以完美解决问题

1、python脚本设置utf-8为默认字符集

import os, sys

import mysql

reload(sys)

sys.setdefaultencoding( "utf-8" )


2、mysql连接时,设置字符集charset='utf8'

3、cursor执行sql语句时,加上字符集utf8的设置 

self.cursor.execute('SET NAMES utf8;')


具体代码如下:

def selectall(self, commandText):

        rtn = None

 

        try:

            if self.auto and self.con == None:

                self.con = mysql.connect(host = self.host, port = self.port,

                                user = self.user, passwd = self.passwd, db = self.db,

                                connect_timeout = 1 ,charset='utf8')

                if self.con:

                    self.cursor = self.con.cursor()

                    self.cursor.execute('SET NAMES utf8;')

            if self.cursor:

                self.cursor.execute('SET NAMES utf8;')

                self.cursor.execute(commandText)

                rtn = self.cursor.fetchall()

        except Exception as ex:

            raise ex;

        finally:

            if self.auto:

                self.close()

        return rtn


相关内容

热门资讯

FBI悬赏136万元追捕美国前... 综合国是直通车、红星新闻5月16日报道,美国联邦调查局(FBI)悬赏20万美元(约合人民币136万元...
一升乳胶漆能刷多少平方米 最佳回答 一升乳胶漆其实并不怎么多,差不多也就是一升可乐瓶的那么大的瓶子能够装一瓶那么这样的乳胶漆...
电冰箱不制冷的原因 最佳回答 电冰箱不制冷的原因可能就是电冰箱电源线损坏,导致电冰箱无法正常工作,遇到这种情况,我们只需...
电视内存多大的合适 电视内存多大的合适:电视内存一般,还是选择至少要1.5g到2g,运行内存存储内存要至少16g或者32...
天然气热水器多大容量比较合适呢 天然气热水器多大容量比较合适呢1、根据家里的面积和用水量来看,如果是共一个厨房两个卫生间,需要选择1...
燃气热水器排烟管可以走烟道吗 燃气热水器排烟管可以走烟道吗:燃气热水器排烟管不可以走公共烟道的,一般厨房都会装有公共烟道,是专门为...
马尔代夫5人潜水身亡,一军人在... 据马尔代夫媒体16日报道,马尔代夫国防军一名军人在搜救失踪潜水人员时身亡。报道说,遇难军人名为穆罕默...
世卫组织:非洲埃博拉疫情构成“... 新华社日内瓦5月17日电 世界卫生组织17日宣布,刚果(金)和乌干达出现的埃博拉疫情已构成“国际关注...
三大运营商即将免月租?官方回应 最近,大家在各大社交平台都可能刷到过这样一条消息——三大运营商即将全面推出免月租、按量计费套餐。有不...
利好来了!刚刚,上海传出重磅消... 跟算力产业相关的一则消息,突然刷屏! 据媒体报道,上海电信15日面向上海电信用户正式推出Token算...