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语言的优雅之处
Jul 04 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
python实现贪吃蛇双人大战
Apr 18 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Python多线程的退出控制实现
Aug 10 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
python 经纬度求两点距离、三点面积操作
Jun 03 Python
Elasticsearch 批量操作
Apr 19 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 print类函数使用总结
2010/06/25 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python如何调用外部系统命令
2019/08/07 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Python如何读取、写入CSV数据
2020/07/28 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
大学活动邀请函
2014/01/28 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2014年测量员工作总结
2014/12/12 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书