Python调用MySQLdb插入中文乱码的解决
目录
MySQLdb插入中文乱码MySQLdb使用utf-8 编码插入中文数据使用环境第一个问题:插入中文失败第二个问题:能插入之后无法在MySQL中保存刚才插入的数据MySQLdb插入中文乱码
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb def main(): fullname = "赵钱孙李" conn = MySQLdb.connect(host="localhost", user="root",passwd="123", db="account", charset="utf8") # OK #conn = MySQLdb.connect(host="localhost", user="root",passwd="123", db="account") # Error!!! cursor = conn.cursor() cursor.execute("insert into account (username,password) values ("%s","%s")" % (fullname, "111")) conn.commit() cursor.close() conn.close() if __name__ == "__main__": main()
如果从终端查询到数据库中的中文是乱码,那么在连接时给出charset参数即可(当然数据库和表必须全部都是utf-8的)。
否则默认插入的字符应该是latin-1的(用fullname.decode("utf8")时报该错误)。
然后将从数据库中读取的中文输出到网页,如果没有任何内容显示,加入以下代码可解决:
import sys reload(sys) sys.setdefaultencoding("utf-8")
Python内部处理编码默认是ascii的:
print sys.getdefaultencoding()
MySQLdb使用utf-8 编码插入中文数据
这几天忙着帮人做一个从网页抓取股票信息并把相应信息存入MySQL中的程序。
使用环境
Python 2.5 for WindowsMySQLdb 1.2.2 for Python 2.5MySQL 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()。需要在语句执行之后提交操作。
源代码如下:
# -*- 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() # 关闭连接
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?