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 greenlet实现原理和使用示例
Sep 24 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
python在每个字符后添加空格的实例
May 07 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
pyqt5中动画的使用详解
Apr 01 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
使用tensorflow 实现反向传播求导
May 26 Python
python通过新建环境安装tfx的问题
May 20 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对象Object的概念 介绍
2012/06/14 PHP
php实现httpclient类示例
2014/04/08 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
python采集百度百科的方法
2015/06/05 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Django框架自定义session处理操作示例
2019/05/27 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
python中pyplot基础图标函数整理
2020/11/10 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
Linux的主要特性
2014/10/06 面试题
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
施工班组长岗位职责
2014/01/05 职场文书
向领导表决心的话
2014/03/11 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript