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学习数据结构实例代码
May 11 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Django csrf 验证问题的实现
Oct 09 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
python 字典item与iteritems的区别详解
Apr 25 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
Python中os模块的简单使用及重命名操作
Apr 17 Python
python实现简单的名片管理系统
Apr 26 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
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python异常和文件处理机制详解
2016/07/19 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
浅谈Python中的继承
2020/06/19 Python
学python最电脑配置有要求么
2020/07/05 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
机械机修工岗位职责
2014/08/03 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
2015年调度员工作总结
2015/04/30 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
通讯稿范文
2015/07/22 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫