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 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()。需要在语句执行之后提交操作。

源代码如下:

 # -*- 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()     # 关闭连接

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python使用MySQLdb for Python操作数据库教程

    本文详细讲述了Python使用MySQLdb for Python操作数据库的方法,分享给大家供大家参考.具体如下: 一般来说网站就是要和数据库进行交互,否则什么都不用做了.今天我们就来分析一个叫MySQLdb的库,使用这个用来和MySQL数据库进行交互. 大家可以从这里获得这个库: http://sourceforge.net/projects/mysql-python 如果你不确定你的python环境里有没有这个库,那就打开python shell,输入 import MySQLdb,如果返

  • Python中MYSQLdb出现乱码的解决方法

    本文实例讲述了Python中MYSQLdb出现乱码的解决方法,分享给大家供大家参考.具体方法如下: 一般来说,在使用mysql最麻烦的问题在于乱码. 查看mysql的编码: 命令:  复制代码 代码如下: show variables like 'character_set_%'; 可以看到如下结果: character_set_client为客户端编码方式: character_set_connection为建立连接使用的编码: character_set_database数据库的编码: ch

  • 安装python时MySQLdb报错的问题描述及解决方法

    问题描述: windows安装python mysqldb时报错python version 2.7 required,which was not found in the registry 网上很多方案,比如方案一: Python3.x时, from _winreg import *  改为 from winreg import * 去掉下划线 import sys from _winreg import * # tweak as necessary version = sys.version

  • 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',pa

  • 解决Python网页爬虫之中文乱码问题

    Python是个好工具,但是也有其固有的一些缺点.最近在学习网页爬虫时就遇到了这样一种问题,中文网站爬取下来的内容往往中文显示乱码.看过我之前博客的同学可能知道,之前爬取的一个学校网页就出现了这个问题,但是当时并没有解决,这着实成了我一个心病.这不,刚刚一解决就将这个方法公布与众,大家一同分享. 首先,我说一下Python中文乱码的原因,Python中文乱码是由于Python在解析网页时默认用Unicode去解析,而大多数网站是utf-8格式的,并且解析出来之后,python竟然再以Unicod

  • 解决vscode python print 输出窗口中文乱码的问题

    一.搭建 python 环境 在 VSC 中点击 F1 键,弹出控制台,输入 ext install 界面左侧弹出扩展窗格,输入python,确认,开始搜索 下载发布者为Don Jayamanne 的 Python 插件 (下载过程中不要切换窗口,不要做其他任何操作,否则会中断下载,下载时间略长,耐心等待) 安装完毕 "文件"-"首选项"-"用户设置",打开用户配置文件settings.json,再其中大括号内输入计算机中 python.exe

  • PHP读取mssql json数据中文乱码的解决办法

    PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. 解决办法如下: 这样,sql server 2008中的中文就可以在网页正常显示了. 如果要将中文正常插入到sql server 2008中,还要加入一条代码:$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文

  • Python之pandas读写文件乱码的解决方法

    python读写文件有时候会出现   'XXX'编码不能打开XXX什么的,用记事本打开要读取的文件,另存为UTF-8编码,然后再用py去读应该可以了.如果还不行,那么尝试使用文件原有的编码方式读取,参考之前的文章 在pandas中读写csv时候通过制定encoding可以有效防止excel打开或者写入中文乱码 data.to_csv(f_out,index=False,encoding='gb2312') 以上这篇Python之pandas读写文件乱码的解决方法就是小编分享给大家的全部内容了,希

  • MySql中表单输入数据出现中文乱码的解决方法

     MySQL会出现中文乱码的原因在于 1.server本身设定问题,一般来说是latin1 2.建库建表时没有制定编码格式. MySql中表单输入数据出现中文乱码的解决方法: 1.建库的时候 CREATE DATABASE test CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 2.建表的时候 CREATE TABLE content ( text VARCHAR(100) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

  • MySQL从命令行导入SQL脚本时出现中文乱码的解决方法

    本文实例讲述了MySQL从命令行导入SQL脚本时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库.建表.添加数据),并执行,不会有任何问题:但是使用mysql命令行工具执行建库脚本时,添加数据中如果包含中文,存入的数据就是乱码或是???... 解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-characte

  • iOS读取txt文件出现中文乱码的解决方法

    一.情景描述: 后台给一个txt文件,编码是utf-8,在Mac电脑Xcode开发环境下读取txt文件内容,汉字会出现乱码,英文没有乱码这种情况. 二.尝试解决方法: 修改编码格式,尝试了NSUTF16StringEncoding,NSUTF8StringEncoding,NSASCIIStringEncoding编码等,出现的问题有时是中文乱码,有时是utf-8不能打开文件问题,最终问题都没能解决. 三.猜测原因: txt文件是从window电脑上创建,有可能和环境有关,第二,编码问题. 四.

  • Java读取properties配置文件时,出现中文乱码的解决方法

    如下所示: public static String getConfig(String key) { Properties pros = new Properties(); String value = ""; try { pros.load(new InputStreamReader(Object.class.getResourceAsStream("/properties.properties"), "UTF-8")); value = pr

  • PHP MPDF中文乱码的解决方式

    废话不多说了,直接奔入主题了. 推荐教程:PHP使用MPDF类生成PDF的方法 1.config.php文件,大约67行: $this->autoLangToFont = true; 2.使用的时候 注意, +aCJK 这个参数,而不是  c这个参数 $mpdf=new \mPDF('+aCJK','A4','','',32,25,27,25,16,13); $mpdf->WriteHTML($content); $mpdf->Output(); 然后就输出中文了 这个针对版本mPDF6

随机推荐