#!/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. express之sendFile

    module.exports = function(req, res, opt) { var applyNo = req.query.applyNo; console.log("applyN ...

  2. webstorm 更改默认服务器端口

    File ->Settings              Build,Execution,Deployment->Debugger 如下图 找到Debugger

  3. BAYSY2 的LVDS引脚 笔记

    差分引脚标号说明: 'L' 代表该引脚属于差分引脚 'xx' 两位整型数,在每一 bank 的独特标记 'y' 表示正向 还是 反向,同时要注意输入输出方向 ‘#’ 0~3,代表 bank0~bank ...

  4. Google地图路线规划

    Google地图路线规划: 需求:给定的两点之间Google地图路径规划和详情. 代码实现: //map定义省略 var directionsDisplay = new google.maps.Dir ...

  5. nodejs net模块

    net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net.Socke ...

  6. HDU1020字符串操作

    #include <stdio.h> #include <string.h> int N; int size; void main() { scanf("%d&quo ...

  7. vi 的使用

    Vi 分三种模式:一般模式,编辑模式,和命令模式 一般模式: 光标移动,搜索与替换,删除,复制,粘贴 编辑模式:插入或者替换文本 命令模式:读取.保存文件 一般模式 光标移动: h(左), j(下), ...

  8. 【学习笔记】load-on-startup Servlet

    创建Servlet实例有两个时机:用户请求之时和应用启动之时.应用启动之时创建的通常用于某些后台服务的Servlet.配置load-on-startup的Servlet有两种方式: 在web.xml文 ...

  9. OPP Services Log

    SELECT FCPP.CONCURRENT_REQUEST_ID REQ_ID, FCP.NODE_NAME, FCP.LOGFILE_NAME  FROM FND_CONC_PP_ACTIONS ...

  10. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...