Python3连接sqlserver

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()

 

没有中文乱码问题。还可以选择其他数据库。推荐使用。

你可能感兴趣的:(python3,pymssql,pyodbc,sql,server)