Python3连接sql server主要有两个库
1.pymssql
2.pyodbc
库1的下载网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
注:下载的时候看好自己的python版本信息
pip install 直接把下载好的.whl文件拉到cmd中 或自行百度whl安装
库2 直接 pip install pyodbc
1.pymssql
# coding=utf-8
# pymssql下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
import pymssql
class MSSQL:
def __init__(self,host,user,pwd,db):
self.host = host
self.user = user
self.pwd = pwd
self.db = db
def GetConnect(self):
if not self.db:
raise(NameError,'没有设置数据库信息')
self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset='utf8')
cur = self.conn.cursor()
if not cur:
raise(NameError,'连接数据库失败')
else:
return cur
def ExecQuery(self,sql):
cur = self.GetConnect()
cur.execute(sql)
resList = cur.fetchall()
self.conn.close()
return resList
def ExecNonQuery(self,sql):
cur = self.GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
def GetData(self,sql):
count = 0
for i in range(len(sql)):
for j in range(len(sql[i])):
count += 1
if type(sql[i][j]) is str:
print(sql[i][j].encode('latin1').decode('gbk'),end=',')
else:
print(sql[i][j],end=',')
if count % len(sql[i]) == 0:
print('\n')
def main():
ms = MSSQL(host='localhost', user='', pwd='', db="new_estate_dalian")
sql = ms.ExecQuery('SELECT top 5 * from [t_h_builds] ')
ms.GetData(sql)
if __name__ == '__main__':
main()
一共有4个函数。
GetConnect()连接方法
ExecQuery()执行查询语句的方法
ExecNonQuery()执行非查询语句的方法
GetData()是为了处理pymssql返回的中文乱码。先编码再解码:encode('latin1').decode('gbk')。方法比较笨。
官网文档:http://www.pymssql.org/en/latest/intro.html
2.pyodbc
import pyodbc
class ODBC:
def __init__(self,server,uid,pwd,db,DRIVER='{SQL Server}'):
self.server = server
self.uid = uid
self.pwd = pwd
self.db = db
self.DRIVER = DRIVER
def GetConnect(self):
if not self.db:
raise(NameError,'没有设置数据库信息')
self.conn = pyodbc.connect(SERVER=self.server,UID=self.uid,PWD=self.pwd,DATABASE=self.db,DRIVER=self.DRIVER)
cur = self.conn.cursor()
if not cur:
raise(NameError,'连接数据库失败')
else:
return cur
def ExecQuery(self,sql):
cur = self.GetConnect()
cur.execute(sql)
resList = cur.fetchall()
self.conn.close()
return resList
def ExecNonQuery(self,sql):
cur = self.GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
def main():
ms = ODBC(server='localhost',uid='', pwd='', db="new_estate_dalian")
sql = ms.ExecQuery('SELECT top 5 * from [t_h_builds] ')
print(sql)
if __name__ == '__main__':
main()
没有中文乱码问题。还可以选择其他数据库。推荐使用。