解決python串連mysql報錯問題

來源:互聯網
上載者:User

標籤:sql語句   python   cursor   mysql   import   

解決python串連mysql報錯問題


最近跑python指令碼時遇到一個問題,當sql語句中有中文時,執行python指令碼報以下錯誤:

Traceback (most recent call last):

  File "kpi_daily_report.py", line 356, in <module>

    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


本文出自 “菜鳥地盤” 部落格,請務必保留此出處http://yangjingangel.blog.51cto.com/8351501/1934665

解決python串連mysql報錯問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.