连接数据库

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 NULLDROP 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 BEGINSELECT * FROM persons WHERE name = @nameEND""")# 调用存储过程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

转载于:https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html

Python连接SQL Server数据库 - pymssql使用基础相关推荐

  1. python连接sql server数据库(pyodbc)

    用python操作ms sql server,有好几种方法: (1)利用pymssql (2)利用pyodbc 这里讲import pyodbc来操作sql server database. pyod ...

  2. Python连接sql server数据库

    Python连接数据库的标准PEP249 原版链接:https://www.python.org/dev/peps/pep-0249/ 问题一:pymssql无法连接sql server Adapti ...

  3. python连接SQL Server:Pymssql模块

    数据库版本:SQL Server 2012. 按照python版本来选择下载pymssql模块,这样才能连接上sql server. 我安装的python版本是3.5 ,64位的,所以下载的pymss ...

  4. Python 连接Sql Server数据库 MSSql

    Python 想要和MSSql数据库进行交互,首先要下载名为"pymssql"的包,然后import该包即可. 地址:https://pypi.python.org/pypi/py ...

  5. python连接sql server数据库并模糊查询

    目录 前言 一.上代码 前言 纯粹记录:含泪记录

  6. python 使用pymssql连接sql server数据库

    Python连接SQL Server数据库 - pymssql使用基础 ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html ...

  7. python cv2模块安装_python 连接sql server数据库,pymssql模块安装。

    python 连接sql server数据库,pymssql模块安装. python版本:python3.7 数据库版本:sql server 2016 连接sql server数据库,本菜鸟用的是p ...

  8. python连接SQL Server取多个结果集:Pymssql模块

    基本的用法可以参考:python连接SQL Server:Pymssql模块 和上一篇文章中的代码,只取一个结果集不同,这次会一次运行2个sql语句,然后分别取出2个结果集,打印输出. 代码中有详细的 ...

  9. python数据库编程:Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    本文实例讲述了Python基于Pymssql模块实现连接SQL Server数据库的方法.分享给大家供大家参考,具体如下: 数据库版本:SQL Server 2012. 按照Python版本来选择下载 ...

最新文章

  1. android兼容小米xiaomi刘海屏解决方案
  2. JavaScript箭头函数(Arrow Function)
  3. 装饰器,生成器,迭代器
  4. elasticsearch 根据条件更新数据
  5. 初次使用cocoapods注意事项
  6. 电脑温度检测软件哪个好_实时检测Mac电脑的温度
  7. python histo 改变 bins 大小_在Python中显示具有非常不均匀的bin宽度的直方图
  8. 服务器上装filezilla server后,本地的ftp客户端连接不上去
  9. LeetCode —— 面试题 08.12. 八皇后(Python)
  10. 机器人学 —— 机器人感知(Mapping)
  11. oracle使用cgi吗_php架构之CGI、FastCGI、php-fpm有什么关系?原来这么简单
  12. ARM处理器上电/复位操作
  13. python魔法属性_python魔法方法-属性转换和类的表示详解
  14. 东芝如何看待蓝牙在物联网热潮下的机遇
  15. Python实现自动通关别踩白块儿
  16. html编辑器的回车换行问题解决方案
  17. 查看linux网络tcp,linux-查看网络原始数据工具tcpdump
  18. 这有一个教科书般的焦煤蝶式套利机会(2018-10-30)
  19. C#   格式化XML方法
  20. TaintDroid 剖析之 DVM 变量级污点跟踪(下篇)

热门文章

  1. maven报错: 错误的类文件:… 类文件具有错误的版本 52.0,应为 54.0
  2. 26个LinkedList用法示例大全以及与ArrayList/数组的相互转换
  3. 【软考】 2019年上半年软件设计师考试上午真题(专业解析+参考答案)
  4. Spring的使用步骤
  5. php中url编码地址栏,php url地址栏传中文乱码解决方法集合_PHP
  6. 上海大华条码称代码_银豹收银之大华条码秤传称设置
  7. QML 实现图片帧渐隐渐显轮播
  8. 深入java抽象类和接口
  9. C++ :Signal: SIGSEGV (Segmentation fault) ,深拷贝
  10. 如何连接两个窗口JAVA_java-如何连接两个ArrayLists?