python 讀取 mysql 中文亂碼

這兩天看了很多關(guān)于mysql中文亂碼的問題,除了創(chuàng)建table的時候設(shè)置為utf8編碼以及修改mysql配置文件的方法外,很少有人提關(guān)于python庫中中文亂碼的處理辦法,尤其是records庫的中文亂碼問題。

文中的代碼在CentOS或者Ubuntu操作系統(tǒng)python3的環(huán)境下都測試沒問題。

基于python3使用pymysql來讀取mysql中的內(nèi)容,在connect中一定要加入charset參數(shù),否則中文在ubuntu或者centos下讀出來顯示一堆問號。

# -*- coding: utf-8 -*-
import pymysql
import config

if __name__ == '__main__':
    db = pymysql.connect(config.mysql_host, config.mysql_user, config.mysql_pass, config.mysql_db, charset='utf8')
    cursor = db.cursor()
    sql = "select name from user"
    cursor.execute(sql)
    for row in cursor.fetchall():
        print(row)
    db.close()

records庫是requests作者 kennethreitz 寫的一個非常方便的針對各種數(shù)據(jù)庫進(jìn)行數(shù)據(jù)處理的python庫,只不過文檔和網(wǎng)上的相關(guān)內(nèi)容很少,尤其是中文的情況,如果不知道正確的使用方法很容易出現(xiàn)亂碼。

mysql4read = 'mysql://{user}:{passwd}@{host}:3306/{db}'.format(host=host, user=user, passwd=pass, db=db)
db = records.Database(mysql4read, connect_args={"charset": "utf8"})
sql = "select name from user"
for row in db.query(sql).as_dict():
    print(row)

可以看到一定要在創(chuàng)建db對象的時候傳入connect_args參數(shù),否則中文很容易出現(xiàn)亂碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容