Python连接Mssql基础教程之Python库pymssql


Posted in Python onSeptember 16, 2018

前言

pymssql模块是用于sql server数据库(一种数据库通用接口标准)的连接。另外pyodbc不仅限于SQL server,还包括Oracle,MySQL,Access,Excel等。

另外除了pymssql,pyodbc还有其他几种连接SQL server的模块,感兴趣的可以在这里找到:https://wiki.python.org/moin/SQL%20Server

本文将详细介绍关于Python连接Mssql之Python库pymssql的相关内容,下面话不多说了,来一起看看详细的介绍吧

连接数据库

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']))

调用存储过程

pymssql 2.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']))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

参考:http://pymssql.org/en/stable/pymssql_examples.html

Python 相关文章推荐
Python获取脚本所在目录的正确方法
Apr 15 Python
python去除文件中空格、Tab及回车的方法
Apr 12 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
Python实现的质因式分解算法示例
May 03 Python
python中字符串的操作方法大全
Jun 03 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Python字符串的常见操作实例小结
Apr 08 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
Python sqlite3查询操作过程解析
Feb 20 Python
用Python绘制漫步图实例讲解
Feb 26 Python
零基础小白多久能学会python
Jun 22 Python
Python字符串及文本模式方法详解
Sep 10 Python
python将秒数转化为时间格式的实例
Sep 16 #Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 #Python
编写多线程Python服务器 最适合基础
Sep 14 #Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 #Python
Python文件读写保存操作的示例代码
Sep 14 #Python
python一键去抖音视频水印工具
Sep 14 #Python
python入门:这篇文章带你直接学会python
Sep 14 #Python
You might like
PHP大转盘中奖概率算法实例
2014/10/21 PHP
smarty简单分页的实现方法
2014/10/27 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
Python 正则表达式操作指南
2009/05/04 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
通用C#笔试题附答案
2016/11/26 面试题
最新自我评价范文
2013/11/16 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
大学生求职信范文
2014/05/24 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
银行奉献演讲稿
2014/09/16 职场文书
高中英语教学反思范文
2016/03/02 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python