#!/usr/bin/env python
 # -*- coding: utf-8 -*-

 import pyodbc

 class MSSQL:
     """
     封装pyodbc
     """

     def __init__(self,host,user,pwd,db='master', charset='utf8'):
         self._host = host
         self._user = user
         self._pwd = pwd
         self._db = db
         self._charset = charset

     def __get_connect(self):
         """
         得到连接信息
         返回: conn.cursor()
         """
         if not self._db:
             raise(NameError,"没有设置数据库信息")
         conn_info = 'DRIVER={SQL Server};DATABASE=%s;SERVER=%s;UID=%s;PWD=%s' % (self._db, self._host, self._user, self._pwd)
         self.conn = pyodbc.connect(conn_info, charset=self._charset)
         cur = self.conn.cursor()
         if not cur:
             raise(NameError,"连接数据库失败")
         else:
             return cur

     def __exec_query(self,sql):
         """
         执行查询语句
         返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段

         调用示例:
                 ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
                 resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")
                 for (id,NickName) in resList:
                     print str(id),NickName
         """
         cur = self.__get_connect()
         cur.execute(sql)
         resList = cur.fetchall()

         #查询完毕后必须关闭连接
         self.conn.close()
         return resList

     def exec_query_tuple(self, sql):
         """结果集以元组返回"""
         return self.__exec_query(sql)

     def exec_query_dict(self, sql):
         result = []
         for row in self.__exec_query(sql):
             result.append( dict([(desc[0], row[index]) for index, desc in enumerate(row.cursor_description)]) )

         return result

     def exec_nonquery(self,sql):
         """
         执行非查询语句

         调用示例:
             cur = self.__GetConnect()
             cur.execute(sql)
             self.conn.commit()
             self.conn.close()
         """
         cur = self.__get_connect()
         cur.execute(sql)
         self.conn.commit()
         self.conn.close()

 if __name__ == '__main__':
     conn = MSSQL('192.168.1.124', 'sa', 'Password', 'Demo', 'GBK')

     print conn.exec_query_dict("select * from Staff where code=0001")

python访问MS SqlServer(通过pyodbc)的更多相关文章

  1. linux 使用 pyodbc 访问 ms sqlserver 数据库

    一.安装linux下Sqlserver的驱动程序: 我们先来安装SqlServer的驱动程序,再安装ODBC相关的,目的是想尽快可以进行测试,因为在安装完Freetds之后,我们马上就可以在linux ...

  2. 使用unidac 在linux 上无驱动直接访问MS SQL SERVER

    随着delphi 10.2 开始了对Linux 的重新支持.devart 也迅速的发布了unidac 7.0, 最大的特性就是支持linux和MongoDB. 并有了其他更新: In this rel ...

  3. MS SqlServer学习笔记(索引)

    1.索引分类 MS SqlServer提供了两种索引:聚集索引和非聚集索引: 聚集索引是将数据按照索引的顺序存放 非聚集索引是将索引和数据分离存放,通过指针将二者联系到一起. 因为两种索引对比: 使用 ...

  4. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合

    在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...

  5. MS SQLServer 批量附加数据库 分类: SQL Server 数据库 2015-07-13 11:12 30人阅读 评论(0) 收藏

    ************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释 ...

  6. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  7. MS SQLServer的关键词BETWEEN的一些注意事项

    近段时间在程序中写到有关搜索的功能.其中有使用到MS SQLServer的关键词BETWEEN,它是搜索数值范围(包括本身)之间的数据. 在使用它时,一些情况还需要注意的.如果时间的数据. 搜索时间数 ...

  8. MS SQLSERVER中如何快速获取表的记录总数

    在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ...

  9. EF Core CodeFirst实践 ( 使用MS SqlServer)

    这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择  ASP.NET Core Web Application (.NET Core) ...

随机推荐

  1. selenium 等待页面加载完成

    一.隐形加载等待: file:///C:/Users/leixiaoj/Desktop/test.html 该页面负责创建一个div <html> <head> <tit ...

  2. excel批处理_判断一个名称是不是药品

    把药品名称导入到sheet1的A字段 # -*- coding: utf-8 -*-"""Created on Fri Dec  9 09:38:58 2016判断一个名 ...

  3. 搭建NFS服务器

    1:yum install -y nfs-utils-* portmap-* 2:NFS安装完毕,需要创建共享目录,共享目录在vi /etc/exports文件里面配置,可配置参数如下: /data/ ...

  4. CMA-ES 算法

    CMA-ES 算法 一.算法介绍 CMA-ES是Covariance Matrix Adaptation Evolutionary Strategies的缩写,中文名称是协方差矩阵自适应进化策略,主要 ...

  5. websocket

    websocket是一个协议,在单个TCP连接上提供全双工通信.  websocket被设计并被实现在 web浏览器和 web 服务器上,但是它可以被用于任何c/s 架构的应用程序中. websock ...

  6. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)

    环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...

  7. 基础知识(05) -- Java中的类

    Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...

  8. Jquery 小技巧

    [每个程序员都会的35个jQuery的小技巧]收集的35个jQuery的小技巧/代码片段,可以帮你快速开发

  9. Android源代码查看途径

    作为一个android coder,多阅读android源码对提高android开发水平是很有帮助的,那么我们可以通过哪些途径查看android源码呢 1.如果你能够FQ的话可以去android官网查 ...

  10. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...