python操作sqlserver

 

pymssql

模块官方网址:

http://www.pymssql.org

一、安装

pymssql是基于FreeTDS的,所以用pip从官方库里安装前,需要先安装FreeTDS。在whl中已经集成了FreeTDS,所以采用下载whl直接安装的方式,这样比较简单。

1、下载whl文件

官方下载地址:https://pypi.python.org/pypi/pymssql

第三网站的whl(版本更新快):http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql

2、安装.whl文件

例如:将.whl文件放在c盘根目录下,用pip 安装 :

 

二、 连接操作数据库

1、范式

  • 使用 connect(...) 创建连接对象conn;
  •  conn.cursor() 创建游标对象cursor(SQL语句的执行基本都在游标上进行);
  •  cursor.execute(...) 方法执行SQL语句, cursor.fetchXXX 获取查询结果;
  •  conn.close() 方法关闭游标cursor和数据库连接

2、数据操作

(1)查询

import pymssql

conn = pymssql.connect(server='192.168.3.33', port='1433', user='sa', password='Abc123', database='regent')
cursor = conn.cursor()

# sql = 'select * from customervip where begaindate = %s' % "'2016-6-5'"     # 字符串拼接写法有sql注入风险,应避免使用
sql = 'select * from customervip where begaindate = %s'
cursor.execute(sql, ('2016-6-5',))

# print(cursor)                                                # <pymssql.Cursor object at 0x0000000002ABF468>

# 遍历查询结果写法一:
# for row in cursor:
#     print(row[0], row[1], row[3].encode('latin-1').decode('gbk'))

# 遍历查询结果写法二:
row = cursor.fetchone()
while row:
    print(row[0], row[1], row[3].encode('latin-1').decode('gbk'))
    row = cursor.fetchone()

cursor.close()
conn.close()
fetchone()               内部维护着一个指针,一次拿一条
fetchall()               全部都拿出来
fetchmany(n)             拿出来n条
callproc()               存储过程

  

(2)增删改

 增删改与查询写法的区别是,执行完sql语句后要加一句:

conn.commit()

 

三、通过类封装pymssql的操作

class MSSQL:

    def __init__(self,
                 server='192.168.3.33',
                 port='1433',
                 user='sa',
                 password='Abc123',
                 database='regent',
                 charset="cp936"):
        self.server = server
        self.port = port
        self.user = user
        self.password = password
        self.database = database
        self.charset=charset

    def __getconnect(self):
        self.conn = pymssql.connect(
            server=self.server,
            port=self.port,
            user=self.user,
            password=self.password,
            database=self.database,
            charset=self.charset,
            # as_dict=True,
        )
        return self.conn.cursor()

    def execquery(self, sql, *args):
        cur = self.__getconnect()
        cur.execute(sql, *args)
        ret_list = cur.fetchall()
        cur.close()
        self.conn.close()
        return ret_list

    def execnquery(self, sql):
        cur = self.__getconnect()
        cur.execute(sql)
        self.conn.commit()
        self.conn.close()


try:
    sqlser = MSSQL()
    s = 'select * from customervip where begaindate = %s'
    ret_list = sqlser.execquery(s, ('2016-6-5',))
    print(ret_list[0],ret_list[1])

except Exception as e:
    print(e)

 

posted @ 2017-07-30 21:05  seaidler  阅读(446)  评论(0)    收藏  举报