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系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)

import sys
reload(sys)
sys.setdefaultencoding('utf8')

  注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”

  一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):

 
 1 #encoding:utf8
2 import sys
3 reload(sys)
4 sys.setdefaultencoding('utf8')
5 import pymssql
6 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 data
15 except Exception,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')]
[Finished in 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:"
print args
print "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 处理中文 读取数据库输出全是问号的更多相关文章

  1. Python使用中文注释和输出中文(原创)

    刚开始学习python,需要在Python中注释中文和输出中文,现在开始尝试: 仅为初步学习参考,高手请绕行. -------------------------------------------- ...

  2. Python 学习笔记:Python 使用 pandas 读取数据库并进行绘图

    上次写了在 Python 怎么使用 mssql 库来对 SQL Server 数据库进行增删查改,今天就写一下 Python 如何通过 pandas 来读取数据库并进行绘图. 一.读取数据库: 利用 ...

  3. Python笔记之format()格式输出全解

    格式化输出:format() format():把传统的%替换为{}来实现格式化输出 使用位置参数:就是在字符串中把需要输出的变量值用{}来代替,然后用format()来修改使之成为想要的字符串,位置 ...

  4. python 获取中文文件名的输出

    #coding:utf8 if __name__ == '__main__': srcfile = u"D:/测试路径/测试文件.txt" f = open(srcfile.enc ...

  5. python flask 如何读取数据库数据并返回到html

    app.py from flask import Flask from flask import render_template from flask_bootstrap import Bootstr ...

  6. python读取数据库并把数据写入本地文件

    一,介绍 上周用jmeter做性能测试时,接口B传入的参数需要依赖接口A生成的借贷申请ID,接口A运行完需要把生成的借贷申请ID导出来到一个文件,作为参数传给接口B,刚开始的时候,手动去数据库倒, 倒 ...

  7. python从数据库获取全量数据的方法

    python从数据库获取全量数据的方法 学习了:https://blog.csdn.net/lom9357bye/article/details/79503658 原文膜拜: import psyco ...

  8. python读取数据库mysql报错

    昨天在学习PYTHON读取数据库的知识时,一直在报错,找不到原因. 最后同事说是语法错误. import sysreload(sys)sys.setdefaultencoding('gb18030') ...

  9. Python 读取和输出到txt

    读txt文件 python常用的读取文件函数有三种read().readline().readlines() read() #一次性读取文本中全部的内容,以字符串的形式返回结果 with open(& ...

随机推荐

  1. (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...

  2. mybatis源码阅读-MappedStatement各个属性解析过程(八)

    调用方 类org.apache.ibatis.builder.xml.XMLMapperBuilder private void configurationElement(XNode context) ...

  3. [bzoj3694]最短路_树链剖分_线段树

    最短路 bzoj-3694 题目大意:给你一个n个点m条边的无向图,源点为1,并且以点1为根给出最短路树.求对于2到n的每个点i,求最短路,要求不经过给出的最短路树上的1到i的路径上的最后一条边. 注 ...

  4. [luogu2209][USACO13]燃油经济性Fuel Economy_贪心

    燃油经济性Fuel Economy 题目大意:FJ想要去旅行.他的车总容量为G,每行驶一个单位就消耗一个单位的油.FJ要行驶D个单位的距离.期间存在n个加油站,每个加油站有一个价格,表示在这个燃油站买 ...

  5. 使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)

    以订单为例(订单详情包括了订单的基本信息,配送物流信息,商品信息),直接上代码: 1.多重属性查询 java实体 public class OrderDetail { @XmlElement(requ ...

  6. UVA LIVE 7146 Defeat the Enemy

    这个题跟codeforces 556 D Case of Fugitive思路一样 关于codeforces 556 D Case of Fugitive的做法的链接http://blog.csdn. ...

  7. 编程算法 - 和为s的连续正整数序列 代码(C)

    和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出全部和为s的连续正数序列(至少含有两个数). 起 ...

  8. 对扩展openflow协议的一点思考

         软件定义X变得越来越火,正所谓,Software is eating the world. 软件定义网络也是如此.不论是在工业界还是学术界都将是一次伟大的革命,都在紧随着这个行业的方向,找自 ...

  9. 一条SQL面试题

    求其中同一个主叫号码的两次通话之间间隔大于10秒的通话记录ID 例如:6,7,8,9,10条记录均符合 ID 主叫号码 被叫号码      通话起始时间            通话结束时间       ...

  10. 【Ubuntu】基本操作 (条目=11)

    定义 NAME 为要操作的对象名 定义 DIR 为文件所在的绝对路径 所有操作默认在普通用户下进行 所有软件包默认是指Debian包(deb包) 1.查看进程 top 2.强制结束进程 PID由top ...