Python的MySQLdb对Mysql的字符串字段的中文查询出现问题,主要原因是在MySQLdb.connect中缺少一个charset="utf8"参数。与那个在PyDev还报错的sys.setdefaultencoding("utf-8")无关。保证表是utf-8编码就可以了。
同时如果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)","用户名","密码");
运行之后,得到如下结果: