python3.4.3如何转换str字符串?

#coding=utf8
import pymssql

class MSSQL:
    def __init__(self,host,user,pwd,db):
        self.host = host
        self.user = user
        self.pwd = pwd
        self.db = db

    def __getConnect(self):
        """
        得到连接信息
        返回: conn.cursor()
        """

        if not self.db:
            raise(nameError,"没有设置数据库信息")
        self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
        cur = self.conn.cursor()
        if not cur:
            raise(nameError,"数据库连接失败")
        else:
            return cur


    def execQuery(self,sql):
        """
        执行查询语句
        返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段

        调用示例:

                ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
                resList = ms.execQuery("select id,NickName from WeiBoUser")
                for (id,NickName) in resList:
                    print str(id),NickName
        """
        cur = self.__getConnect()
        cur.execute(sql)
        resList = cur.fetchall()

        #查询完毕后必须关闭连接
        self.conn.close()
        return resList


    def exeNonQuery(self,sql):
        """
        执行非查询语句

        调用示例:

                cur = self.__getConnect()
                cur.execute(sql)
                self.conn.commit()
                self.conn.close()
        """

        cur = self.__getConnect()
        cur.execut(sql)
        self.conn.commit()
        self.conn.close()

def main():
    ## ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
    ## #返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
    ## ms.exeNonQuery("insert into WeiBoUser values('2','3')")
    ms = MSSQL(host="192.168.0.178",user="sa",pwd="xibao.2015",db="fortest")
    resList = ms.execQuery("select top 10 ID,Name from CP_Dealer")
    for (ID,Name) in resList:
        print (str(Name).decode("utf8"))


if __name__ == '__main__':
    main()
    
    

## print (str(Name).decode("utf8"))此处执行错误报错,报错内容如下]\
图片描述

图片描述 下面这个报错就是直接打印str(Name)的错误。求指导啊~~

阅读 5.6k
2 个回答

手头没有python3.0的开发环境, 先语言说一下:

  • python3.0和python2.*是完全两种语言

  • python3.0目前在各大公司很少被使用, 原因就是3.0版本基本处于实验阶段,重写了很多东西, 非常多的三方库包括你使用的sql连接库对3.0的支持不好或者不支持;

  • 你的代码有很重的pytho2的痕迹,或者说你可能拿来了一些别人的代码;

我简单说一下我的一些排查方向

  • python3.0和2.0的重要区别就是在python3.0对字符串(str)和字节串(bytes)进行了区分

  • 在3.0中认为str类型的值就是unicode内码, 所以对str类型只能encode成为字节串(bytes); 认为bytes字节串就是编码之后的二进制串, 只能decode成为unicode内码;

  • 建议你判断一下你的函数返回值类型

print(type(Name)) #如果不是str类型, 则无需增加str的转换,直接decode即可

最后的建议: 想要好好开发, 还是先用python2.7版本.

建议你先谷歌一下 提问的技巧

你问的不清不楚,还直接贴了大段没有说明问题在哪里的代码,出的什么问题,问题的输出是什么,你的预期结果是什么。
目测你是想问为什么在

 for (ID,Name) in resList:
        print str(Name).decode("utf8")

这里打印的结果有问题。
你先把问题的展现贴出来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进