Web 2.0 网站架构、优化 数据库架构
标签类目:mysqldb

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

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

第一个问题:插入中文失败
这个是由于字符编码问题引起的。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()。
需要在语句执行之后提交操作。
#-*- coding: utf-8 -*-
import sys,MySQLdb

conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",
charset="utf8") #需要设定一下charset为utf-8
cursor=conn.cursor() #生成连接的指针对象

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

print n
conn.commit() #提交操作结果

#进行查询操作检查刚刚执行的插入操作结果
n = cursor.execute("select * from stocklist")
for row in cursor.fetchall():
 print row[0] + row[1]
cursor.close() #关闭指针
conn.close() #关闭连接

python 安装mysql_db、PIL

tar zxf MySQL-python-1.2.2.tar.gz
修改 site.cfg 文件,指定 mysql_config 安装位置
mysql_config = /usr/bin/mysql_config
python setup.py build
sudo python setup.py install

在apache 上设置 PYTHON_EGG_CACHE 路径使默认可读写
SetEnv PYTHON_EGG_CACHE /path/to/dir

要想编译这个模块,就必须要先安装开发版的mysql,这里不说mysql怎么安装,假设装好了,并且装到/opt/mysql下。
这个目录下有一个叫 site.cfg 的文件,我们要修改的设置就在这里面,它的内容如下:

[options]
# embedded: link against the embedded server library
# threadsafe: use the threadsafe client
# static: link against a static library (probably required for embedded)

embedded = False
threadsafe = True
static = False

# The path to mysql_config.
# Only use this if mysql_config is not on your PATH, or you have some weird
# setup that requires it.
#mysql_config = /usr/local/bin/mysql_config

# The Windows registry key for MySQL.
# This has to be set for Windows builds to work.
# Only change this if you have a different version.
registry_key = SOFTWARE\MySQL AB\MySQL Server 5.0

以#开头的是注释,这里可能需要修改的有两个,一个是mysql_config,一个是threadsafe。往往编译不过就是这两个造成的。
mysql_config是指定mysql_config这个文件的路径,一般在mysql安装路径下,这里mysql装到/opt/mysql,因此取消mysql_config这行的注释,修改为
mysql_config=/opt/mysql/bin/mysql_config
一般来说这样就可以编译了。但是,如果在编译到最后时,报告链接不上libmysqlclient_r.so的话,还需要把threadsafe设置为False。

tar zxvf Imaging-1.1.6.tar.gz
cd Imaging-1.1.6
python setup.py build_ext -i
python selftest.py
python setup.py install
安装完毕后,可在python安装目录下的site-packages找到PIL安装目录。

返回顶部