因为要写一个小的数据导入工具,用openpyxl读取了xlsx文件,用pyQt5写了界面,然后需要到SQL2000里匹配条码相同的商品,尝试使用pymssql这个库,挺好用的,就是有一个问题,对中文数据库名不支持,不管把连接字串里的charset改成GBK还是GB2312,都是报错。
搜了好久,也没找到解决方案,把github上看到有个博客园的博主写的一条跟帖:[Python学习笔记-SQLSERVER的大批量导入以及日常操作(比executemany快3倍)](https://www.cnblogs.com/Evan-fanfan/p/9728455.html),然后又搜索其他连接sqlserver的python库,发现了pyodbc,参考了这篇文章:[python操作数据库-SQLSERVER-pyodbc](https://www.cnblogs.com/Evan-fanfan/p/12694287.html),尝试了一下,发现pyodbc是可以使用中文名的数据库,另外我也想了个变通方法,在pymssql中也能访问中文名的数据库了。
用pyodbc的方法,直接打开中文名的数据库:
--------------------------------------------------------------------------------------------------
`
import pyodbc
DRIVER = "{SQL Server Native Client 10.0}"
SERVER = "127.0.0.1"
PORT = 1434
UID = "sa"
PWD = "123456"
DATABASE = "S3宏达电器"
CONN = "DRIVER=%s;SERVER=%s,%s;UID=%s;PWD=%s;DATABASE=%s" % (DRIVER, SERVER, PORT, UID, PWD, DATABASE)
db = pyodbc.connect(CONN)
cursor = db.cursor()
res = cursor.execute("""
select top 5 * from d_goods
""").fetchall()
print( res )
db.close()
`
使用pymssql的变通方法,先连master数据库,然后在执行语句的时候,加一个use 中文名的数据库,就可以了:
--------------------------------------------------------------------------------------------------
`
import pymssql
import pprint
server = "127.0.0.1\\sql2000"
port = '1434'
user = "sa"
password = "123456"
database = 'master'
conn = pymssql.connect(server=server, user=user, password=password, database=database, port=port, charset="utf8")
cursor = conn.cursor()
sql = "use %s " % 'S3宏达电器' #注意%s后面有一个空格
sql += "select top 5 * from d_goods "
cursor.execute(sql)
rows = cursor.fetchall()
print(rows)
conn.close()
`