zoukankan      html  css  js  c++  java
  • 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的编码好坑,也不太熟悉,有什么问题帮忙指正。

  • 相关阅读:
    Linux 清空nohup.out(引用别人的文章)
    Nginx map模块
    Nginx 防盗链 secure_link 模块
    Nginx HTTP框架提供的其它变量
    NC 命令引用了一个高手的文章做收藏
    Nginx HTTP框架提供的请求相关变量
    6 MyISAM和InnoDB
    5.MVCC
    4 乐观锁和悲观锁
    Redis原理
  • 原文地址:https://www.cnblogs.com/liuda9495/p/7722488.html
Copyright © 2011-2022 走看看