Python中执行存储过程及获取存储过程返回值的方法


Posted in Python onOctober 07, 2017

本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下:

在Pathon中如何执行存储过程呢?可以使用如下方法:

存储过程定义基本如下:

ALTER  procedure [dbo]. [mysp]
 @Station varchar ( 50),
 @SN varchar ( 50),
 @Info varchar ( 500) output ,
@Msg varchar ( 500) output

1. 使用adodbapi

from adodbapi import connect
server = 'dbserver'
user = 'username'
password = 'password'
database = 'database'
sp = 'sp'
station = 'station'
sn = 'sn'
try :
  db = connect('Provider=SQLOLEDB.1 ;Data Source=%s;Initial Catalog=%s;/
            User ID=%s;Password=%s;'%(server, database, user, password))
except Exception, e:
  print e
else :
  cur = db.cursor()
  msg = cur.callproc(sp, (station, sn)) #参数与存储过程有关
  if len(msg) > 1 :
    if msg[-1 ] is None :
      print 'sn is ok. Can be test at this station'
    else :
      print msg[-1 ]
finally :
  try : db.close()
  except : pass

2. 使用pymssql

from pymssql import connect
server = 'dbserver'
user = 'user'
password = 'password'
database = 'database'
sp = 'sp'
station = 'station'
sn = 'sn'
sql = ['set nocount on' ]
sql.append('declare @Msg varchar(500)' )
sql.append('declare @return_value varchar' )
sql.append("exec @return_value = %s @Station = '%s', @SN = '%s', @Info = '@Info', @Msg = @Msg output" )
sql.append('select @Msg, @return_value' )
sql = '/n' .join(sql) % (sp, station, sn)
def ffchk(server, user, password, database, sql):
  try :
    db = connect(host = server,
          database = database,
          user = user,
          password = password,
          login_timeout = 10 )
    cur = db.cursor()
    cur.execute(sql)
  except Exception, e:
    print e
  else :
    cur.nextset() # 要加上这句才能通过fetch函数取到值   注意:这语句在Python2.7对应的pymssql版本中是错误!!!
    print cur.fetchone()
  finally :
    try : db.close()
    except : pass

总结:

1. adodbapi简单,不用写一串的sql语句,但是不能取到返回的Error Code,只能取到返回的错误信息,也可能是我没找到方法

2. pymssql与第一条相反,可以取到返回值和错误信息,但要写sql语句。

这里重点说明一下使用pymssql的方法

cur.execute("exec 存储过程名 @参数1=XXX, @参数2='YYY'......")
cur.fetchone()        #如果该存储过程中有返回结果集,可以调用此句,如果存储过程是return,则pymssql不支持,无法获取,此句错误
conn.commit()        #如果没有此句,则数据并没有真正生效,比如存储过程是执行insert的,没有commit的话,并不会真正插入数据

一般通过此三步即可以应对很多使用存储过程的要求

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
python多线程之事件Event的使用详解
Apr 27 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Python实现最常见加密方式详解
Jul 13 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
Python List列表对象内置方法实例详解
Oct 22 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
Oct 07 #Python
深入理解Django中内置的用户认证
Oct 06 #Python
Python3学习笔记之列表方法示例详解
Oct 06 #Python
python获取外网IP并发邮件的实现方法
Oct 01 #Python
Python之自动获取公网IP的实例讲解
Oct 01 #Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 #Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 #Python
You might like
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
js数组去重的常用方法总结
2014/01/24 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
年终总结会主持词
2014/03/25 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
2015年统战工作总结
2015/05/19 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers