python 连接数据库对中文读取超过_python 处理中文 读取数据库输出全是问号
ref:http://www.cnblogs.com/zhoujie/archive/2013/06/07/problem1.html
1、python连接mssql数据库编码问题
python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。
(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码
#encoding=utf-8
(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
(3)、设置python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)
importsys
reload(sys)
sys.setdefaultencoding('utf8')
注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”
一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):
1 #encoding:utf8
2 importsys3 reload(sys)4 sys.setdefaultencoding('utf8')5 importpymssql6 try:7 conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')8 sql="select * from UserInfo"
9
10 cur=conn.cursor()11 cur.execute(sql)12 data=cur.fetchall()13 conn.close()14 print data15 exceptException,e:16 print e
运行结果如下:
[(u'20093501', u'\xb9\xf9\xbe\xb8', u'\u7537', 35, u'\xb4\xf3\xcf\xc0'), (u'20093502', u'\xbb\xc6\xc8\xd8', u'\u5973', 34, u'\xc3\xc0\xc5\xae'), (u'20093503', u'\xc1\xee\xba\xfc\xb3\xe5', u'\u7537', 25, u'2B\xc7\xe0\xc4\xea'), (u'20093504', u'\xc8\xce\xd3\xaf\xd3\xaf', u'\u5973', 24, u'\xc6\xaf\xc1\xc1')]
[Finishedin 0.2s]
虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。
上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。
其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文件也是类似的解决方案。
2、参数*args和和**kwargs
这是一个Python特性,类似C#和C++中的参数数组(param[]),允许函数接受动态的、可变数量的、参数名只在运行时可知的参数。 如果在函数定义时,只在参数前面加一个*号,所有传递给函数的参数将会保存为一个元组. 如果在函数定义时,在参数前面加两个*号,所有传递给函数的关键字参数,将会保存为一个字典
def foo(*args, **kwargs):print "Positional arguments are:"
printargsprint "Keyword arguments are:"
print kwargs
调用它,看看它是如何工作的:
>>> foo(1, 2, 3) Positional arguments are: (1, 2, 3) Keyword arguments are: {}>>> foo(1, 2, name='Adrian', framework='Django') Positional arguments are: (1, 2) Keyword arguments are: {'framework': 'Django', 'name': 'Adrian'}
python 连接数据库对中文读取超过_python 处理中文 读取数据库输出全是问号相关推荐
- python连接数据库并编写调用函数_Python使用pyodbc访问数据库操作方法详解
本文实例讲述了Python使用pyodbc访问数据库操作方法.分享给大家供大家参考,具体如下: 1.连接数据库 1)直接连接数据库和创建一个游标(cursor) cnxn =pyodbc.connec ...
- python中文分词统计_python 实现中文分词统计
总是看到别人用Python搞各种统计,前端菜鸟的我也来尝试了一把.有各种语义分析库在,一切好像并不是很复杂.不过Python刚开始看,估计代码有点丑. 一.两种中文分词开发包 thulac (http ...
- python 读取文件到字典读取顺序_python顺序的读取文件夹下名称有序的文件方法...
python顺序的读取文件夹下名称有序的文件方法 如下所示: import os path="/home/test/" #待读取的文件夹 path_list=os.listdir( ...
- python中文文本分析_Python有趣|中文文本情感分析
前言 前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下: 数据情况和处理 数据情况 这里的数据为大众点评上的评论数 ...
- python加载图片的方法_python从网络读取图片并直接进行处理的方法
python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...
- python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...
- python numpy读取数据_python使用numpy读取、保存txt数据的实例
1.首先生成array数组 import numpy as np a = np.random.rand(5,5) print(a) 结果: array([[0.17374613, 0.87715267 ...
- python合并word表格单元格_python docx模块读取word表格遇到合并单元格时的处理
python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表 遇到合并单元格时的处理 通 ...
- python的文件读取方式_python中文件读取方式
指\u201CPython编程:从入口到实践\u201D和\u201CPython编程快速启动\u201D1.文件路径获取文件路径包括绝对路径和相对路径.绝对路径是指\u201CE: \\ \\\u2 ...
最新文章
- CmsEasy20160825前台无限制GetShell复现
- LINUX 第五章 apache php mysql
- iOS程序员眼中的客户端免登陆(数据迁移已更新)
- Map集合的几种遍历方式
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
- spring mvc 入门DispatcherServlet转发
- 180°舵机的使用步骤
- Python try/except/finally等
- 点播转码相关常见问题及排查方式
- java 子类必须实现_Java学习之接口的子类必须实现接口的全部方法吗?
- spring 配置文件被加载两次
- win10下正确使用Sublime Text搭建python调试环境
- 接收流信息---字符串
- XEN虚拟机修改系统时间
- H5调用app原生接口
- python 画笔画一些形状(八卦图、小鸭子、五角星等)
- Linux管道相关命令
- 修改Linux swap大小,LINUX操作系统如何调整SWAP大小
- My Visual DataBase(数据库编程软件)v5.3免费版
- jquery设置cursor的属性改变光标的类型(形状)