python中pyodbc模块应用之WINDOWS系统上的SQLSERVER连接(含远程连接)

今天本想测试用python连接到公司SQLSERVER2008上,上网百度了很多,一开始只能连接本地服务器,远程操作还是不行。

经过几番折腾,终于找到了方法(通过建立系统数据源的方式实现),特将方法及过程展示出来,以避免后来人少走弯路。

为了在一个CLASS中实现普通连接及数据源连接,我在初始化方法中添加了可变参数(*)及关键字参数(**)。

通过查看pyodbc官方文档,提示说SQL SERVER 设置不赞成,为了兼容后期server版本,我还是使用了“ODBC Driver 13 for SQL Server”。

注意:ODBC Driver 13 for SQL Server如果本机没有安装的请先下载安装,地址:https://www.microsoft.com/en-us/download/details.aspx?id=50420。注意选择对应机型(64位或32位)

一、普通连接(貌似只能本地连接,如果不对请赐教,也就是SERVER=192.168.0.X不起作用)

这个百度就出来很多文章,这里就不多赘述,可以看下边的源代码。

二、DSN方式连接

DSN设置请参考此文章:http://blog.sina.com.cn/s/blog_780cd4880101r5lg.html

设置好DSN,请记住名称及用户名及密码。后边连接参数需要。

三、代码(两种连接通用方式)

import pyodbc  

class ODBC_MS():  
    ''''对pyodbc库的操作进行简单封装 
    pyodbc库的下载地址:http://code.google.com/p/pyodbc/downloads/list 
    使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启 
    此类完成对数据库DB的连接/查询/执行操作  
    '''  
      
    def __init__(self, UID, PWD,*SERVERS,**DSN):  
        '''initialization '''  
        self.SERVERS=SERVERS
        self.UID = UID  
        self.PWD = PWD  
        self.DSN=DSN
     
    #普通连接    
    def __GetConnect(self):  
        ''''' Connect to the DB '''  
          
        if not self.SERVERS:  
            print("no setting db info")  
  

 self.conn=pyodbc.connect('DRIVER=%s;SERVER=%s;DATABASE=%s;UID=%s;PWD=%s'

                                         % (self.SERVERS[0],self.SERVERS[1],self.SERVERS[2],self.UID,self.PWD))  

 
        
        cur = self.conn.cursor()  
        if not cur:  
            print("connected failed!")  
        else:  
            return cur  
        
    #DSN方式连接    
    def __GetDsnConnect(self):  
        ''''' Connect to the DB '''  
          
        if not self.DSN:  
            print("没有数据源")  
  
        self.conn= pyodbc.connect(r'DSN=%s;UID=%s;PWD=%s' % (self.DSN['DSN'],self.UID,self.PWD))
        
        cur = self.conn.cursor()  
        if not cur:  
            print("connected failed!")  
        else:  
            return cur      
          
    def ExecQuery(self, sql):  
        ''''' Perform one Sql statement '''  
          
        cur = self.__GetConnect() #建立链接并创建数据库操作指针  
        cur.execute(sql)#通过指针来执行sql指令  
        if not cur:  
            print("connected failed!")  
        ret = cur.fetchall()#通过指针来获取sql指令响应数据  
        cur.close()#游标指标关闭  
        self.conn.close()#关闭数据库连接  
          
        return ret 
    
    def ExecQuery_Sdn(self, sql):  
        ''''' Perform one Sql statement '''  
          
        cur = self.__GetDsnConnect() #建立链接并创建数据库操作指针  
        cur.execute(sql)#通过指针来执行sql指令  
        if not cur:  
            print("connected failed!")  
        ret = cur.fetchall()#通过指针来获取sql指令响应数据  
        cur.close()#游标指标关闭  
        self.conn.close()#关闭数据库连接  
          
        return ret  
      
      
    def ExecNoQuery(self,sql):  
        ''''' Person one Sql statement like write data, or create table, database and so on'''  
          
        cur = self.__GetConnect()  
        cur.execute(sql)  
        self.conn.commit()#连接句柄来提交  
        cur.close()  
        self.conn.close()  
    
    def ExecNoQuery_Sdn(self,sql):  
        ''''' Person one Sql statement like write data, or create table, database and so on'''  
          
        cur = self.__GetDsnConnect()  
        cur.execute(sql)  
        self.conn.commit()#连接句柄来提交  
        cur.close()  
        self.conn.close() 
        
        


def main():  

    sql='select top 10 customer_name from customer'

    ms = ODBC_MS('user_name', 'password',DSN='datacentor')
    results=ms.ExecQuery_Sdn(sql)

    #ms = ODBC_MS('user_name', 'password','{ODBC Driver 13 for SQL Server}', r'localhost', 'test')
    #results=ms.ExecQuery(sql)
    for row in results:
        print(row)  
        
if __name__ == '__main__':  
    main()  




  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值