解决Python3.6.5+pymssqlsql server插入数据中文出现乱码的问题

    最近用Python在对sql server的数据进行读取跟写入,但过程异常坎坷,读取的时候只要将连接的参数charset设置为GBK,就能正常读取中文字符,但是写入到sql server的时候,中文就都乱码了,网上找了很多资料也没办法解决,最后google,就找到方法了,其实很简单,就是Python开始的时候编码设置为utf-8,连接sql server的时候也设置为utf-8,最后也是最重要的一步就是将要插入到sql中的中文字符进行编码为 latin-1 后解码为gbk即可。具体例子如下:

#-*- coding:utf-8 -*-
import pymssql
conn = pymssql.connect("数据库地址:1433", "账号", "密码", "表名",charset='utf8')
cursor = conn.cursor()
ls_sql="insert into table (ID,UserName) values(1,'小明')".encode('latin-1').decode('gbk')
cursor.execute(ls_sql)
conn.commit()

      实际上,上面那个方法还是会存在有些中文在写入数据库的时候会是乱码,这里提供另外一种完美解决的办法:使用pyodbc

因为使用pyodbc连接sqlserver的时候需要安装微软的官方驱动ODBC driver,所以对于中文的兼容性也是很好,我就是用了pyodbc之后,没有了中文写入数据库变乱码的烦恼。

    那么该怎样使用pyodbc呢,老规矩,先pip install pyodbc,然后再pyodbc的github页面查看当前sqlserver所需要安装的驱动,一般如果你本机有安装了SQL server,对应的驱动也会安装好了

https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows

解决Python3.6.5+pymssqlsql server插入数据中文出现乱码的问题_第1张图片

    大家可以根据本身的需要去安装,下面的连接是最新版的ODBC Driver 18
https://www.microsoft.com/en-us/download/details.aspx?id=56730

       安装好之后,我们可以pyodbc.drivers()这个函数来查看你本机已安装好的驱动版本,比如我的是13

解决Python3.6.5+pymssqlsql server插入数据中文出现乱码的问题_第2张图片

    然后就可以开始进行操作了,你会发现,连接数据库的时候连编码都不用设置,就能正常的将中文写入数据库,不亏是亲生的。

import pyodbc
# 连接数据库
conn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=127.0.0.1;DATABASE=Test;UID=sa;PWD=888888')
cursor = conn.cursor()
# 插入语句
cursor.execute('insert into table (ID,UserName) values(1,'小明')')
# 提交
conn.commit()
# 关闭连接
conn.close()

 

你可能感兴趣的:(Sql,Server)