Python连接SQL Server数据库 - 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 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使用基础相关推荐
- python连接sql server数据库(pyodbc)
用python操作ms sql server,有好几种方法: (1)利用pymssql (2)利用pyodbc 这里讲import pyodbc来操作sql server database. pyod ...
- Python连接sql server数据库
Python连接数据库的标准PEP249 原版链接:https://www.python.org/dev/peps/pep-0249/ 问题一:pymssql无法连接sql server Adapti ...
- python连接SQL Server:Pymssql模块
数据库版本:SQL Server 2012. 按照python版本来选择下载pymssql模块,这样才能连接上sql server. 我安装的python版本是3.5 ,64位的,所以下载的pymss ...
- Python 连接Sql Server数据库 MSSql
Python 想要和MSSql数据库进行交互,首先要下载名为"pymssql"的包,然后import该包即可. 地址:https://pypi.python.org/pypi/py ...
- python连接sql server数据库并模糊查询
目录 前言 一.上代码 前言 纯粹记录:含泪记录
- python 使用pymssql连接sql server数据库
Python连接SQL Server数据库 - pymssql使用基础 ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html ...
- python cv2模块安装_python 连接sql server数据库,pymssql模块安装。
python 连接sql server数据库,pymssql模块安装. python版本:python3.7 数据库版本:sql server 2016 连接sql server数据库,本菜鸟用的是p ...
- python连接SQL Server取多个结果集:Pymssql模块
基本的用法可以参考:python连接SQL Server:Pymssql模块 和上一篇文章中的代码,只取一个结果集不同,这次会一次运行2个sql语句,然后分别取出2个结果集,打印输出. 代码中有详细的 ...
- python数据库编程:Python基于Pymssql模块实现连接SQL Server数据库的方法详解
本文实例讲述了Python基于Pymssql模块实现连接SQL Server数据库的方法.分享给大家供大家参考,具体如下: 数据库版本:SQL Server 2012. 按照Python版本来选择下载 ...
最新文章
- android兼容小米xiaomi刘海屏解决方案
- JavaScript箭头函数(Arrow Function)
- 装饰器,生成器,迭代器
- elasticsearch 根据条件更新数据
- 初次使用cocoapods注意事项
- 电脑温度检测软件哪个好_实时检测Mac电脑的温度
- python histo 改变 bins 大小_在Python中显示具有非常不均匀的bin宽度的直方图
- 服务器上装filezilla server后,本地的ftp客户端连接不上去
- LeetCode —— 面试题 08.12. 八皇后(Python)
- 机器人学 —— 机器人感知(Mapping)
- oracle使用cgi吗_php架构之CGI、FastCGI、php-fpm有什么关系?原来这么简单
- ARM处理器上电/复位操作
- python魔法属性_python魔法方法-属性转换和类的表示详解
- 东芝如何看待蓝牙在物联网热潮下的机遇
- Python实现自动通关别踩白块儿
- html编辑器的回车换行问题解决方案
- 查看linux网络tcp,linux-查看网络原始数据工具tcpdump
- 这有一个教科书般的焦煤蝶式套利机会(2018-10-30)
- C# 格式化XML方法
- TaintDroid 剖析之 DVM 变量级污点跟踪(下篇)
热门文章
- maven报错: 错误的类文件:… 类文件具有错误的版本 52.0,应为 54.0
- 26个LinkedList用法示例大全以及与ArrayList/数组的相互转换
- 【软考】 2019年上半年软件设计师考试上午真题(专业解析+参考答案)
- Spring的使用步骤
- php中url编码地址栏,php url地址栏传中文乱码解决方法集合_PHP
- 上海大华条码称代码_银豹收银之大华条码秤传称设置
- QML 实现图片帧渐隐渐显轮播
- 深入java抽象类和接口
- C++ :Signal: SIGSEGV (Segmentation fault) ,深拷贝
- 如何连接两个窗口JAVA_java-如何连接两个ArrayLists?