解決python連接mysql報錯問題
創(chuàng)新互聯(lián)公司是專業(yè)的洛陽網(wǎng)站建設(shè)公司,洛陽接單;提供網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行洛陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!最近跑python腳本時遇到一個問題,當(dāng)sql語句中有中文時,執(zhí)行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)
經(jīng)過查詢與測試,下面三點可以完美解決問題
1、python腳本設(shè)置utf-8為默認(rèn)字符集
import os, sys
import mysql
reload(sys)
sys.setdefaultencoding( "utf-8" )
2、mysql連接時,設(shè)置字符集charset='utf8'
3、cursor執(zhí)行sql語句時,加上字符集utf8的設(shè)置
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
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。