扣丁学堂Python培训之pymssql基础教程详解

2018-09-18 13:36:48 379浏览

今天扣丁学堂Python培训老师给大家介绍一下关于Python连接Mssql基础教程之Python库pymssql的详细介绍,首先pymssql模块是用于sqlserver数据库(一种数据库通用接口标准)的连接。另外pyodbc不仅限于SQLserver,还包括Oracle,MySQL,Access,Excel等,下面我们一起来看一下吧。



连接数据库

pymssql连接数据库的方式和使用sqlite的方式基本相同:

使用connect创建连接对象

connect.cursor创建游标对象,SQL语句的执行基本都在游标上进行

cursor.executeXXX方法执行SQL语句,cursor.fetchXXX获取查询结果等

调用close方法关闭游标cursor和数据库连接

import pymssql
 
# server  数据库服务器名称或IP
# user   用户名
# password 密码
# database 数据库名称
conn = pymssql.connect(server, user, password, database)
 
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()

注意:例子中查询操作的参数使用的%s而不是'%s',若参数值是字符串,在执行语句时会自动添加单引号

游标使用注意事项

一个连接一次只能有一个游标的查询处于活跃状态,如下:

c1 = conn.cursor()
c1.execute('SELECT * FROM persons')
 
c2 = conn.cursor()
c2.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
 
print( "all persons" )
print( c1.fetchall() ) # 显示出的是c2游标查询出来的结果
 
print( "John Doe" )
print( c2.fetchall() ) # 不会有任何结果

为了避免上述的问题可以使用以下两种方式:

创建多个连接来保证多个查询可以并行执行在不同连接的游标上

使用fetchall方法获取到游标查询结果之后再执行下一个查询,如下:

c1.execute('SELECT ...')
c1_list = c1.fetchall()
 
c2.execute('SELECT ...')
c2_list = c2.fetchall()

游标返回行为字典变量

上述例子中游标获取的查询结果的每一行为元组类型,

可以通过在创建游标时指定as_dict参数来使游标返回字典变量,

字典中的键为数据表的列名

conn = pymssql.connect(server, user, password, database)
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语句(上下文管理器)

可以通过使用with语句来省去显示的调用close方法关闭连接和游标

with pymssql.connect(server, user, password, database) 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']))

调用存储过程

pymssql2.0.0以上的版本可以通过cursor.callproc方法来调用存储过程

with pymssql.connect(server, user, password, database) as conn:
 with conn.cursor(as_dict=True) as cursor:
  # 创建存储过程
  cursor.execute("""
  CREATE PROCEDURE FindPerson
   @name VARCHAR(100)
  AS BEGIN
   SELECT * FROM persons WHERE name = @name
  END
  """)
 
  # 调用存储过程
  cursor.callproc('FindPerson', ('Jane Doe',))
  for row in cursor:
   print("ID=%d, Name=%s" % (row['id'], row['name']))

以上就是关于扣丁学堂Python开发浅谈pymssql基础教程详解的全部内容,希望本文的内容对大家的学习Python开发有所帮助,想要了解更多关于Python开发方面内容的小伙伴可以登录扣丁学堂官网咨询,这里有时俱进的课程体系和大量的Python视频教程让学员免费观看学习,想要学好Python的小伙伴快到扣丁学堂来了解详情吧。扣丁学堂Python技流群:279521237。


扣丁学堂微信公众号 


关注微信公众号获取更多学习资料 

 

查看更多关于"Python开发资讯"的相关文章>


标签: Python培训 Python视频教程 Python在线视频 Python学习视频

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号