python 2x SSH通道连接服务器读取数据库和中文编码问题

使用Python2.7在读取数据库文件时

用的是SSH通道,登录服务器需要用户名和密码,在连接数据库

# -*- coding: UTF-8 -*-
import pymysql
from sshtunnel import SSHTunnelForwarder
import sys reload(sys) sys.setdefaultencoding('utf-8')
#这个是设置编码,把assci设置成utf-8
def get_unpublished_data(): server_id = '132.777.155.167' #服务器地址我这是乱写的 ssh_password = '服务器登录密码' ssh_username = '服务器用户名' with SSHTunnelForwarder((server_id, 22),
      ssh_password=ssh_password,
      ssh_username=ssh_username,
      remote_bind_address= ('127.0.0.1', 3306)) as server: #这里的地址是重新绑定的地址,我这里是自己的本地相当于localhost,端口默认;

#上面相当于连接服务器,下面就是连接数据库,之后无论是pymysql还是其它的MySQLdb之类的都是一样使用;
#主要是数据库使用的是utf-8的编码格式,所以需要这句charset='utf8'注意是8而不是-8,如果在开通设置了sys编码,这里好像就不需要了 db
= pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user= '数据库用户名', passwd = '数据库密码', db = '数据库的名字',charset= 'utf8') #这里的地址也是本地的localhost cursor = db.cursor()
     sql = ''
effect = cursor.execute(sql) db_result = cursor.fetchall() db.commit() db.close()

爬了n个坑后,终于连接上数据库了;输出时

发现中文都变成了('201709123456', 1, '???', '??', '??????', '??', '15110096707') 

这时就要加上charset='utf8';

 结果就是(u'201709123456', 1, u'u590fu4fafu6e0a', u'u53d1u5e03', u'u5708u5916u663eu5b50u5957u9910', u'u5f20u4e09', u'15110096707')

全都是Unicode,单个print结果看起来是中文,但不能进行其他的比较操作

,在开头加上把默认的assci码变成了utf-8,基本上就可以正常比较使用,

也可以str.encode('unicode-escape')把str变成unicode,好像也不太好使,数据库中读取的结果如u'u590fu4fafu6e0a'前面还有一个小u,这种转换没有这个u;

因为之前一直用的是3x,感觉2x的编码好坑,也不太熟悉,有什么问题帮忙指正。

原文地址:https://www.cnblogs.com/liuda9495/p/7722488.html