前言:
pymssql本身在Linux系统上使用不会有乱码问题,由于内容需要在win上进行,python代码挂载到win10后出现查询数据乱码问题。
解决pymssql乱码:
**方案一 **:pymssql.connect()参数多加一个charset=‘cp936’
conn = pymssql.connect(config.server, config.user, config.password, config.database, charset='cp936')
坑:我有张表的内容包含----名称、详细说明…等。其中名称不乱码详细说明乱码,使用字符集参数后,名称直接就没了,详细说明的正常了。
方案二:把pymssql改成使用pyodbc
很简单只要稍微改一点就好了如下
#import pymssql
import pyodbc
#conn = pymssql.connect(config.server, config.user, config.password, config.database)
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+config.server+';DATABASE='+config.database+';UID='+ config.user +';PWD='+ config.password)
衍生问题:我返回的内容是json出去的就给报了个-----TypeError: Object of type Row is not JSON serializable。
原因:pyodbc返回值直接看结果的type和pymssql是一样的都是list,但是去看list里面的值类型时pyodbc是pyodbc.Row而pymssql是tuple,众所周知tuple可以直接json。那么我们就把pyodbc.Row转list好了,因为list可以直接json也是众所周知。
cursor.execute(sql)
rows = cursor.fetchall()
data=[]
for item in rows:
data.append(list(item))
return data