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中请使用isinstance()判断变量类型
Aug 25 Python
python基于phantomjs实现导入图片
May 13 Python
python正则表达式re之compile函数解析
Oct 25 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
Python单元和文档测试实例详解
Apr 11 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
Python tkinter实现日期选择器
Feb 22 Python
python实现简单的名片管理系统
Apr 26 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
jquery获取节点名称
2015/04/26 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
数据库方面面试题
2012/04/22 面试题
质量保证书格式
2015/02/27 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript