Python连接SQL Server获取数据转JSON

# -*- coding: utf-8 -*-
'''
不同的SQL server版本对应的DRIVER字段不同。对应关系如下
{SQL Server} - released with SQL Server 2000
{SQL Native Client} - released with SQL Server 2005 (also known as version 9.0)
{SQL Server Native Client 10.0} - released with SQL Server 2008
{SQL Server Native Client 11.0} - released with SQL Server 2012
'''
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import json,pyodbc

def Table():
    try:

        conn=pyodbc.connect(r'DRIVER={SQL Server Native Client 10.0};SERVER=1.1.1.1;DATABASE=test_1;UID=1;PWD=123')
        cursor = conn.cursor()
        cursor.execute("select F1,F2,F3,F4 from A2017")
        jsonDate=[]
        rows = cursor.fetchall()
        # 循环读取元组数据
        for row in rows:
            result={}
            result['F1']=row[0]
            result['F2'] = row[1]
            result['F3'] = row[2]
            result['F4'] = row[3]
            jsonDate.append(result)
    except:
        print 'ss'
    else:
        #加ensure_ascii=False,能够防止中文乱码。
         jsonDateChar=json.dumps(jsonDate,ensure_ascii=False)
        #去除中括号
         return jsonDateChar[1:len(jsonDateChar)-1]

if __name__=='__main__':
    # 调用函数
    jsonData=Table()
    #JSON保存文件名
    w=open(r'H:\json.txt','w+')
    # 写数据
    w.write(jsonData)
    w.close()

头部文件

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

将字符串写入到文件时会出现"UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-24: ordinal not in range(128)"的错误,原因是由于python基于ASCII处理字符的,当出现不属于ASCII的字符时,会出现错误信息。加入头部代码可以解决

posted on 2017-12-21 16:37  _峻熙  阅读(539)  评论(0编辑  收藏  举报

导航