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 相关文章推荐
python实现的阳历转阴历(农历)算法
Apr 25 Python
python抓取网页时字符集转换问题处理方案分享
Jun 19 Python
Python中unittest用法实例
Sep 25 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
python让列表倒序输出的实例
Jun 25 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python数组并集交集补集代码实例
Feb 18 Python
基于Pytorch SSD模型分析
Feb 18 Python
pandas数值排序的实现实例
Jul 25 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递归算法和应用方法介绍
2013/04/15 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
php接口隔离原则实例分析
2019/11/11 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
python中xrange用法分析
2015/04/15 Python
python flask 多对多表查询功能
2017/06/25 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python常用数据重复项处理方法
2019/11/22 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
农民工创业典型事迹
2014/01/25 职场文书
二审答辩状范文
2015/05/22 职场文书
文明礼貌主题班会
2015/08/14 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
python实现简单聊天功能
2021/07/07 Python