Python连接SQL Server数据库

在开发Python程序的过程中,可以使用pymssql模块实现和SQL Server数据库的连接与操作。开发者可以通过如下命令安装pymssql。

pip install pymssql

如果不能安装,可以参考pip install本地文件的方式进行安装。

在Python程序中,使用pymssql模块的基本流程如下。
(1)连接数据库,设置连接参数。
(2)打开cursor,执行SQL操作语句。
(3)通过cursor获取数据,可以一次获取所有数据,也可以一次获取一行。整个结果集是元组列表,是list类型,且每一条记录是一个元组。
(4)如果要增加或修改数据,就要调用函数commit()来提交事务;否则,程序会退出,数据库中的数据不会有变化。
(5)用函数close()关闭数据库连接,及时释放连接资源。

下面的实例演示了使用pymssql模块连接并操作SQL Server数据库中数据的过程。
(1)编写SQL文件23.sql。具体代码如下。

create database test;
go
use test;
go
if object_id('tb') is not null
   drop table tb;
go
CREATE TABLE TB(ID INT,NAME NVARCHAR(20),SCORE NUMERIC(10,2));
INSERT INTO TB(ID,NAME,SCORE)
VALUES(1,'语文',100),
  (2,'数学',80),
  (3,'英语',900),
  (4,'政治',65),
  (5,'物理',65),
  (6,'化学',85),
  (7,'生物',55),
  (8,'地理',100)

在SQL Server数据库中打开上述SQL文件,单击“执行”按钮后会生成一个名为“tset”的数据库,并在里面添加了一条数据。

(2)编写程序文件mssql01.py,使用pymssql模块连接并操作SQL Server数据库中的数据。具体实现代码如下。

import pymssql
#数据库连接
conn=pymssql.connect(host='DESKTOP-VMVTB06',user='sa',password='guanxijing',database='test')
#打开游标
cur=conn.cursor();
if not cur:
   raise Exception('数据库连接失败!')
sSQL = 'SELECT * FROM TB'
#执行SQL,获取所有数据
cur.execute(sSQL)
result=cur.fetchall()
#1.result是列表,其中的每个元素是元组
print(type(result),type(result[0]))
#2.
print('\n\n总行数:'+ str(cur.rowcount))
#3.通过enumerate返回行号
for i,(id,name,v) in enumerate(result):
  print('第 '+str(i+1)+' 行记录->>> '+ str(id) +':'+ name+ ':' + str(v) )
#4.修改数据
cur.execute("insert into tb(id,name,score) values(9,'历史',75)")
cur.execute("update tb set score=95 where id=7")
conn.commit() #修改数据后提交事务
#再查一次
cur.execute(sSQL)
#5.一次取一条数据,cur.rowcount为−1
r=cur.fetchone()
i=1
print('\n')
while r:
  id,name,v =r #r是一个元组
  print('第 '+str(i)+' 行记录->>> '+ str(id) +':'+ name+ ':' + str(v) )
  r=cur.fetchone()
  i+= 1
conn.close()

程序执行后会和指定SQL Server数据库建立连接,实现查询、更新和统计数据库表TB中数据的功能,并输出整个操作过程。

<class 'list'> <class 'tuple'>
总行数:8
第 1 行记录->>> 1:语文:100.00
第 2 行记录->>> 2:数学:80.00
第 3 行记录->>> 3:英语:900.00
第 4 行记录->>> 4:政治:65.00
第 5 行记录->>> 5:物理:65.00
第 6 行记录->>> 6:化学:85.00
第 7 行记录->>> 7:生物:55.00
第 8 行记录->>> 8:地理:100.00
第 1 行记录->>> 1:语文:100.00
第 2 行记录->>> 2:数学:80.00
第 3 行记录->>> 3:英语:900.00
第 4 行记录->>> 4:政治:65.00
第 5 行记录->>> 5:物理:65.00
第 6 行记录->>> 6:化学:85.00
第 7 行记录->>> 7:生物:95.00
第 8 行记录->>> 8:地理:100.00
第 9 行记录->>> 9:历史:75.00

在上述实例中用到了如下所示的连接参数。

  • user:用户名。
  • password:密码。
  • trusted:布尔值,指定是否使用Windows身份认证登录。
  • host:主机名。
  • database:数据库。
  • timeout:查询超时。
  • login_timeout:登录超时。
  • charset:数据库的字符集。
  • as_dict:布尔值,指定返回值是字典还是元组。
  • max_conn:最大连接数。

而下面的实例文件mssql02.py演示了使用pymssq模块创建SQL Server数据库表并查询里面数据的过程。在编写Python程序之前,需要先在SQL Server数据库中创建一个名为“dyt”的数据库。程序文件mssql02.py的具体实现代码如下。

import pymssql
# server表示数据库服务器名称或IP
# user 表示用户名
# password表示密码
# database表示数据库名称
conn = pymssql.connect('DESKTOP-VMVTB06', 'sa', 'guanxijing', 'dyt')
cursor = conn.cursor()
#新建、插入操作
cursor.execute("""
IF OBJECT_ID('persons', 'U') IS NOT NULL
DROP TABLE persons
CREATE TABLE persons (
id INT NOT NULL,
name VARCHAR(100),
salesrep VARCHAR(100),
PRIMARY KEY(id)
)
""")
cursor.executemany(
 "INSERT INTO persons VALUES (%d, %s, %s)",
 [(1, 'John Smith', 'John Doe'),
  (2, 'Jane Doe', 'Joe Dog'),
  (3, 'Mike T.', 'Sarah H.')])
#如果没有指定autocommit属性为True,就需要调用commit()方法
conn.commit()
#查询操作
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
row = cursor.fetchone()
while row:
 print("ID=%d, Name=%s" % (row[0], row[1]))
row = cursor.fetchone()
#也可以使用for循环来迭代查询结果
for row in cursor:print("ID=%d, Name=%s" % (row[0], row[1]))
#关闭连接
conn.close()

执行后会输出:

D=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith
ID=1, Name=John Smith

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!