使用pymssql模块操作SQL Server数据库
一,连接数据库
使用pymssql连接SQL Server数据库,首先创建连接和游标:
import
pymssql
conn
= pymssql.connect(host=
'
host
'
,user=
'
user
'
,password=
'
pwd
'
,database=
'
db_name
'
)
cursor
= conn.cursor()
1,行的格式
当执行select语句获取数据时,返回的数据行有两种格式:元组和字典,行的默认格式是元组。pymssql返回的数据集的格式是在创建游标时设置的,当参数 as_dict为True时,返回的行是字典格式,该参数的默认值是False,因此,默认的行格式是元组。
cursor = conn.cursor(as_dict=True)
2,执行查询
使用游标执行SQL语句
cursor.execute(
"
sql statement
"
)
3,提交事务
当执行更新操作时,需要显式调用 commit()函数来提交事务:
conn.commit()
如果事务执行失败,可以回滚事务:
conn.rollback()
4,关闭连接,释放资源
conn.close()
二,更新数据
对数据库有查询,更新和新增操作,在更新和插入数据时,需要显式提交事务。当需要更新数据时,调用游标的execute()函数执行SQL命令来实现:
Cursor.execute(operation)
Cursor.execute(operation, params)
如果要在一个事务中执行多条SQL命令,可以调用游标的executemany()函数:
Cursor.executemany(operation, params_seq)
1,执行数据更新和删除
通过游标的execute()函数来执行TSQL语句,调用 commit() 来提交事务
cursor.execute(
"""
sql statement
"""
)
conn.commit()
2,执行数据的多行插入
如果需要插入多条记录,可以使用游标的executemany()函数,该函数包含模板SQL 命令和一个格式化的参数列表,用于在一条事务中插入多条记录:
args=[(1,
'
John Smith
'
,
'
John Doe
'
),
(
2,
'
Jane Doe
'
,
'
Joe Dog
'
),
(
3,
'
Mike T.
'
,
'
Sarah H.
'
)]
cursor.executemany(
"
INSERT INTO persons VALUES (%d, %s, %s)
"
, args )
conn.commit()
三,遍历数据
当从SQL Server数据库中获取数据时,可以使用fetchone()从结果集中提取一条记录,使用fetchmany()从结果集中提取多条记录,或使用fetchall()提取全部结果集:
cursor.fetchone()
#
return a row (a tuple or a dict) if as_dict was passed to pymssql.connect()
cursor.fetchmany(size=None)
#
return a list of tuples or dicts if as_dict was passed to pymssql.connect()
cursor.fetchall()
#
return a list of tuples or dicts if as_dict was passed to pymssql.connect()
由于游标是一个迭代器,因此,可以使用for语句以迭代方式逐行处理查询的结果集。
for
row
in
cursor:
1,以元组方式遍历数据
返回的结果集中,每一行都是一个元组:
cursor=
connect.cursor()
cursor.execute(
'
SELECT * FROM persons WHERE salesrep=%s
'
,
'
John Doe
'
)
for
row
in
cursor:
print
(
'
row = %r
'
% (row,))
2,以字典方式遍历数据
返回的结果集,每一行是一个字典结构:
cursor = conn.cursor(as_dict=
True)
cursor.execute(
'
SELECT * FROM persons WHERE salesrep=%s
'
,
'
John Doe
'
)
for
row
in
cursor:
print
(
"
ID=%d, Name=%s
"
% (row[
'
id
'
], row[
'
name
'
]))
四,关闭连接
在一个连接中,可以提交多个事务,当查询完成之后,一定要关闭连接:
conn.close()
通常情况下,使用with来自动关闭连接:
import
pymssql
with pymssql.connect(server, user, password,
"
db_name
"
) as conn:
with conn.cursor(as_dict
=
True) as cursor:
cursor.execute(
'
SELECT * FROM persons WHERE salesrep=%s
'
,
'
John Doe
'
)
for
row
in
cursor:
print
(
"
ID=%d, Name=%s
"
% (row[
'
id
'
], row[
'
name
'
]))
参考文档:
pymssql reference
Python中从SQL型数据库读写dataframe型数据

