Python MySQLdb 使用utf-8 编码插入中文数据

时间:2023-01-05 09:42:11

这几天忙着帮人做一个从网页抓取股票信息并把相应信息存入MySQL中的程序。

使用环境:
Python 2.5 for Windows
MySQLdb 1.2.2 for Python 2.5
MySQL 4.1.22

在写程序中遇到了些怪的故障。

第一个问题:插入中文失败
 这个是由于字符编码问题引起的。MySQL安装时我已经设置为utf8编码,表也是使用utf8编码建立。程序中只要在开头写好#-*- coding: utf-8 -*-,并在设定连接字符串时候写清使用utf8就可以了conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")。设置之后从MySQL中取出的以utf8编码保存的中文也不会发生乱码。
 对中文字符串,如:a = "浦发银行",在进行插入操作前做一下编码转换a = a.decode("gbk").encode("utf-8")。然后进行插入操作就没有任何问题了。

第二个问题:能插入之后无法在MySQL中保存刚才插入的数据
经过检查数据可以被正确的插入,但是连接断开之后不保存在表中。经过检查发现原来是漏了conn.commit()。需要在语句执行之后提交操作。

源代码如下。

 

Python MySQLdb 使用utf-8 编码插入中文数据#-*- coding: utf-8 -*-
Python MySQLdb 使用utf-8 编码插入中文数据
import sys,MySQLdb
Python MySQLdb 使用utf-8 编码插入中文数据
Python MySQLdb 使用utf-8 编码插入中文数据conn
=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")    #需要设定一下charset为utf-8
Python MySQLdb 使用utf-8 编码插入中文数据
cursor=conn.cursor()    #生成连接的指针对象
Python MySQLdb 使用utf-8 编码插入中文数据

Python MySQLdb 使用utf-8 编码插入中文数据
#进行字符串编码转换并进行插入
Python MySQLdb 使用utf-8 编码插入中文数据
= "浦发银行"
Python MySQLdb 使用utf-8 编码插入中文数据
= a.decode("gbk").encode("utf-8")    #编码转换为utf-8
Python MySQLdb 使用utf-8 编码插入中文数据
sql="insert into stocklist (stockno,stockname) values (%s,%s)"    #生成sql语句
Python MySQLdb 使用utf-8 编码插入中文数据
param=('600000',a)    #生成sql语句的参数
Python MySQLdb 使用utf-8 编码插入中文数据
= cursor.execute(sql,param)    #执行sql语句
Python MySQLdb 使用utf-8 编码插入中文数据#
以上操作等价于n = cursor.execute("insert into stocklist (stockno,stockname) values ('430004','"+ "浦发银行".decode("gbk").encode("utf-8") + "')")
Python MySQLdb 使用utf-8 编码插入中文数据

Python MySQLdb 使用utf-8 编码插入中文数据
print n
Python MySQLdb 使用utf-8 编码插入中文数据conn.commit() 
#提交操作结果
Python MySQLdb 使用utf-8 编码插入中文数据

Python MySQLdb 使用utf-8 编码插入中文数据
#进行查询操作检查刚刚执行的插入操作结果
Python MySQLdb 使用utf-8 编码插入中文数据
= cursor.execute("select * from stocklist")
Python MySQLdb 使用utf-8 编码插入中文数据
for row in cursor.fetchall():
Python MySQLdb 使用utf-8 编码插入中文数据    
print row[0] + row[1]
Python MySQLdb 使用utf-8 编码插入中文数据cursor.close()    
#关闭指针
Python MySQLdb 使用utf-8 编码插入中文数据
conn.close()    #关闭连接