【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进

Python的MySQLdb对Mysql的字符串字段的中文查询出现问题,主要原因是在MySQLdb.connect中缺少一个charset="utf8"参数。与那个在PyDev还报错的sys.setdefaultencoding("utf-8")无关。保证表是utf-8编码就可以了。

【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进_第1张图片

同时如果MySQLdb只是单纯对Mysql作单纯查询,并不用像《【Python】Mysql数据库操作类》(点击打开链接)那样,需要执行链接的connect中commit()方法,commit()方法仅仅是需要执行在那些对Mysql有修改、有插入的操作之后。

因此,MySQLdb对Mysql操作类的改进如下,这里同时还将MySQLdb中多次用到的游标cursor,设置为类全局变量,在类初始化的同时初始化这个游标。同时结果唯一的查询无须再单独开一个方法,对于查询结果,取其[0][0]的东西就可以了。代码如下:

#-*-coding:utf-8-*-
import MySQLdb
#数据库操作类
class DB:
    conn=None;#这里的None相当于其它语言的NULL
    cursor=None;
    def __init__(self):#构造函数
        self.conn=MySQLdb.connect(host="127.0.0.1",user="pc",passwd="admin",db="test",port=3306,charset="utf8");
        self.cursor=self.conn.cursor();#初始化游标
        #数据库连接,localhost python不认,必须127.0.0.1
    def getBySql(self,sql,*param):        
        self.cursor.execute(sql,param);
        return self.cursor.fetchall();
    def setBySql(self,sql,*param):
        self.cursor.execute(sql,param);
        self.conn.commit();#提交上面的sql语句到数据库执行
    def __del__(self):#析构函数
        self.cursor.close();#销毁游标
        self.conn.close();#关闭数据库连接

#主程序        
db=DB();
print "usertable中的条目数:{0}".format(db.getBySql("select count(*) from usertable")[0][0]);#结果唯一的查询
print "usertable中id大于4的结果:"
result=db.getBySql("select * from blog where id>%s",4)
for row in result:
    for cell in row:
        print cell,
    print;

#增删改实例:
#db.setBySql("insert into usertable(username,password) values(%s,%s)","用户名","密码");

上述查询对如下的一张blog表进行查询:

【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进_第2张图片

运行之后,得到如下结果:

【Python】Mysql中文乱码问题与MySQLdb对Mysql操作类的改进_第3张图片

你可能感兴趣的:(mysql,python,中文乱码,mysqldb,utf8)