python操作sqlserver
pymssql
模块官方网址:
一、安装
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)
浙公网安备 33010602011771号