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'\u590f\u4faf\u6e0a', u'\u53d1\u5e03', u'\u5708\u5916\u663e\u5b50\u5957\u9910', u'\u5f20\u4e09', u'15110096707')
全都是Unicode,单个print结果看起来是中文,但不能进行其他的比较操作
,在开头加上把默认的assci码变成了utf-8,基本上就可以正常比较使用,
也可以str.encode('unicode-escape')把str变成unicode,好像也不太好使,数据库中读取的结果如u'\u590f\u4faf\u6e0a'前面还有一个小u,这种转换没有这个u;
因为之前一直用的是3x,感觉2x的编码好坑,也不太熟悉,有什么问题帮忙指正。