文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何解决Python调用MySQLdb插入中文乱码的问题

2023-06-29 16:34

关注

这篇文章主要介绍如何解决Python调用MySQLdb插入中文乱码的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

MySQLdb插入中文乱码

#!/usr/bin/python# -*- coding: utf-8 -*- import MySQLdbdef 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 sysreload(sys)sys.setdefaultencoding('utf-8')

Python内部处理编码默认是ascii的:

print sys.getdefaultencoding()

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

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

使用环境

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

第一个问题:插入中文失败

这个是由于字符编码问题引起的。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,MySQLdbconn = 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  nconn.commit()  # 提交操作结果 # 进行查询操作检查刚刚执行的插入操作结果 n  =  cursor.execute( " select * from stocklist " ) for  row  in  cursor.fetchall():     print  row[0]  +  row[ 1 ]cursor.close()     # 关闭指针 conn.close()     # 关闭连接

以上是“如何解决Python调用MySQLdb插入中文乱码的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯