zoukankan      html  css  js  c++  java
  • python访问MS SqlServer(通过pyodbc)

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 
     4 
     5 import pyodbc
     6 
     7 
     8 class MSSQL:
     9     """
    10     封装pyodbc
    11     """
    12 
    13     def __init__(self,host,user,pwd,db='master', charset='utf8'):
    14         self._host = host
    15         self._user = user
    16         self._pwd = pwd
    17         self._db = db
    18         self._charset = charset
    19 
    20     def __get_connect(self):
    21         """
    22         得到连接信息
    23         返回: conn.cursor()
    24         """
    25         if not self._db:
    26             raise(NameError,"没有设置数据库信息")
    27         conn_info = 'DRIVER={SQL Server};DATABASE=%s;SERVER=%s;UID=%s;PWD=%s' % (self._db, self._host, self._user, self._pwd)
    28         self.conn = pyodbc.connect(conn_info, charset=self._charset)
    29         cur = self.conn.cursor()
    30         if not cur:
    31             raise(NameError,"连接数据库失败")
    32         else:
    33             return cur
    34 
    35     def __exec_query(self,sql):
    36         """
    37         执行查询语句
    38         返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
    39 
    40         调用示例:
    41                 ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
    42                 resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")
    43                 for (id,NickName) in resList:
    44                     print str(id),NickName
    45         """
    46         cur = self.__get_connect()
    47         cur.execute(sql)
    48         resList = cur.fetchall()
    49 
    50         #查询完毕后必须关闭连接
    51         self.conn.close()
    52         return resList
    53 
    54     def exec_query_tuple(self, sql):
    55         """结果集以元组返回"""
    56         return self.__exec_query(sql)
    57     
    58     def exec_query_dict(self, sql):
    59         result = []
    60         for row in self.__exec_query(sql):
    61             result.append( dict([(desc[0], row[index]) for index, desc in enumerate(row.cursor_description)]) )
    62         
    63         return result
    64 
    65     def exec_nonquery(self,sql):
    66         """
    67         执行非查询语句
    68 
    69         调用示例:
    70             cur = self.__GetConnect()
    71             cur.execute(sql)
    72             self.conn.commit()
    73             self.conn.close()
    74         """
    75         cur = self.__get_connect()
    76         cur.execute(sql)
    77         self.conn.commit()
    78         self.conn.close()
    79         
    80 
    81 if __name__ == '__main__':
    82     conn = MSSQL('192.168.1.124', 'sa', 'Password', 'Demo', 'GBK')
    83     
    84     print conn.exec_query_dict("select * from Staff where code=0001")
  • 相关阅读:
    10.28MySQL的介绍和安装
    10.24 Event事件,进程池与线程池,协程
    10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量
    10.22进程互斥锁,队列,堆栈,线程
    10.21 操作系统发展史,进程
    10.18(粘包问题与解决方法,UDP,socketserver)
    day 67小结
    day 67作业
    day 66 小结
    day 66作业
  • 原文地址:https://www.cnblogs.com/junejs/p/4220429.html
Copyright © 2011-2022 走看看