python 读取 mysql 中文乱码

作者: 采菊东篱下 | 来源:发表于2017-12-05 16:05 被阅读82次

    这两天看了很多关于mysql中文乱码的问题,除了创建table的时候设置为utf8编码以及修改mysql配置文件的方法外,很少有人提关于python库中中文乱码的处理办法,尤其是records库的中文乱码问题。

    文中的代码在CentOS或者Ubuntu操作系统python3的环境下都测试没问题。

    基于python3使用pymysql来读取mysql中的内容,在connect中一定要加入charset参数,否则中文在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 写的一个非常方便的针对各种数据库进行数据处理的python库,只不过文档和网上的相关内容很少,尤其是中文的情况,如果不知道正确的使用方法很容易出现乱码。

    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)
    

    可以看到一定要在创建db对象的时候传入connect_args参数,否则中文很容易出现乱码。

    相关文章

      网友评论

        本文标题:python 读取 mysql 中文乱码

        本文链接:https://www.haomeiwen.com/subject/xglcixtx.html