`
yzd
  • 浏览: 1818130 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Python如何执行存储过程,获取存储过程返回值

 
阅读更多
<p>在Pathon中如何执行存储过程呢?可以使用如下方法:</p>
<p>存储过程定义基本如下:</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Courier New; color: #0000ff; font-size: x-small;"><span style="font-family: 'Courier New'; color: #0000ff; font-size: 10pt;">ALTER</span>
</span>
<span style="font-family: Courier New; font-size: x-small;"><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: #0000ff;"><span style="color: #0000ff;">procedure</span>
</span>
[dbo]<span style="color: #808080;"><span style="color: #808080;">.</span>
</span>
[mysp] </span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Courier New; font-size: x-small;"><span style="font-family: 'Courier New'; font-size: 10pt;">@Station <span style="color: #0000ff;"><span style="color: #0000ff;">varchar</span>
</span>
<span style="color: #808080;"><span style="color: #808080;">(</span>
</span>
50<span style="color: #808080;"><span style="color: #808080;">),</span>
</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Courier New; font-size: x-small;"><span style="font-family: 'Courier New'; font-size: 10pt;">@SN <span style="color: #0000ff;"><span style="color: #0000ff;">varchar</span>
</span>
<span style="color: #808080;"><span style="color: #808080;">(</span>
</span>
50<span style="color: #808080;"><span style="color: #808080;">),</span>
</span>
<span style="color: #008000;"><span style="color: #008000;"></span>
</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Courier New; font-size: x-small;"><span style="font-family: 'Courier New'; font-size: 10pt;">@Info <span style="color: #0000ff;"><span style="color: #0000ff;">varchar</span>
</span>
<span style="color: #808080;"><span style="color: #808080;">(</span>
</span>
500<span style="color: #808080;"><span style="color: #808080;">)</span>
</span>
<span style="color: #0000ff;"><span style="color: #0000ff;">output</span>
</span>
<span style="color: #808080;"><span style="color: #808080;">,</span>
</span>
</span>
</span>
</p>
<p class="MsoNormal" style="text-indent: 5pt;"><span style="font-family: Courier New; font-size: x-small;"><span style="font-family: 'Courier New'; font-size: 10pt;">@Msg <span style="color: #0000ff;"><span style="color: #0000ff;">varchar</span>
</span>
<span style="color: #808080;"><span style="color: #808080;">(</span>
</span>
500<span style="color: #808080;"><span style="color: #808080;">)</span>
</span>
<span style="color: #0000ff;"><span style="color: #0000ff;">output</span>
</span>
</span>
</span>
</p>
<p></p>
<p>1. 使用adodbapi</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Python代码 <a title="收藏这段代码"><img class="star" src="http://www.iteye.com/images/icon_star.png" alt="收藏代码"></a>
</div>
</div>
<ol class="dp-py">
<li>
<span class="keyword">from</span>
adodbapi<span class="keyword">import</span>
connect</li>
<li>
<li>server=<span class="string">'dbserver'</span>
</li>
<li>user=<span class="string">'username'</span>
</li>
<li>password=<span class="string">'password'</span>
</li>
<li>database=<span class="string">'database'</span>
</li>
<li>sp=<span class="string">'sp'</span>
</li>
<li>station=<span class="string">'station'</span>
</li>
<li>sn=<span class="string">'sn'</span>
</li>
<li>
<li>
<span class="keyword">try</span>
:</li>
<li>db=connect('Provider=SQLOLEDB.<span class="number">1</span>
;DataSource=%s;InitialCatalog=%s;/</li>
<li>UserID=%s;Password=%s;'%(server,database,user,password))</li>
<li>
<span class="keyword">except</span>
Exception,e:</li>
<li>
<span class="keyword">print</span>
e</li>
<li>
<span class="keyword">else</span>
:</li>
<li>cur=db.cursor()</li>
<li>msg=cur.callproc(sp,(station,sn))<span class="comment">#参数与存储过程有关</span>
</li>
<li>
<span class="keyword">if</span>
len(msg)&gt;<span class="number">1</span>
:</li>
<li>
<span class="keyword">if</span>
msg[-<span class="number">1</span>
]<span class="keyword">is</span>
<span class="special">None</span>
:</li>
<li>
<span class="keyword">print</span>
<span class="string">'snisok.Canbetestatthisstation'</span>
</li>
<li>
<span class="keyword">else</span>
:</li>
<li>
<span class="keyword">print</span>
msg[-<span class="number">1</span>
]</li>
<li>
<span class="keyword">finally</span>
:</li>
<li>
<span class="keyword">try</span>
:db.close()</li>
<li>
<span class="keyword">except</span>
:<span class="keyword">pass</span>
</li>
</ol>
</div>
<p></p>
<p>2. 使用pymssql</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Python代码 <a title="收藏这段代码"><img class="star" src="http://www.iteye.com/images/icon_star.png" alt="收藏代码"></a>
</div>
</div>
<ol class="dp-py">
<li>
<span class="keyword">from</span>
pymssql<span class="keyword">import</span>
connect</li>
<li>
<li>server=<span class="string">'dbserver'</span>
</li>
<li>user=<span class="string">'user'</span>
</li>
<li>password=<span class="string">'password'</span>
</li>
<li>database=<span class="string">'database'</span>
</li>
<li>sp=<span class="string">'sp'</span>
</li>
<li>station=<span class="string">'station'</span>
</li>
<li>sn=<span class="string">'sn'</span>
</li>
<li>
<li>sql=[<span class="string">'setnocounton'</span>
]</li>
<li>sql.append(<span class="string">'declare@Msgvarchar(500)'</span>
)</li>
<li>sql.append(<span class="string">'declare@return_valuevarchar'</span>
)</li>
<li>sql.append(<span class="string">"exec@return_value=%s@Station='%s',@SN='%s',@Info='@Info',@Msg=@Msgoutput"</span>
)</li>
<li>sql.append(<span class="string">'select@Msg,@return_value'</span>
)</li>
<li>sql=<span class="string">'/n'</span>
.join(sql)%(sp,station,sn)</li>
<li>
<li>
<span class="keyword">def</span>
ffchk(server,user,password,database,sql):</li>
<li>
<span class="keyword">try</span>
:</li>
<li>db=connect(host=server,</li>
<li>database=database,</li>
<li>user=user,</li>
<li>password=password,</li>
<li>login_timeout=<span class="number">10</span>
)</li>
<li>cur=db.cursor()</li>
<li>cur.execute(sql)</li>
<li>
<span class="keyword">except</span>
Exception,e:</li>
<li>
<span class="keyword">print</span>
e</li>
<li>
<span class="keyword">else</span>
:</li>
<li>cur.nextset()<span class="comment">#要加上这句才能通过fetch函数取到值</span>
  <span style="color: #ff0000;"> 注意:这语句在Python2.7对应的pymssql版本中是错误!!!</span>

</li>
<li>
<span class="keyword">print</span>
cur.fetchone()</li>
<li>
<span class="keyword">finally</span>
:</li>
<li>
<span class="keyword">try</span>
:db.close()</li>
<li>
<span class="keyword">except</span>
:<span class="keyword">pass</span>
</li>
</ol>
</div>
<p></p>
<p>总结:</p>
<p>1. adodbapi简单,不用写一串的sql语句,但是不能取到返回的Error Code,只能取到返回的错误信息,也可能是我没找到方法</p>
<p>2. pymssql与第一条相反,可以取到返回值和错误信息,但要写sql语句。</p>
<p></p>
<p>这里重点说明一下使用pymssql的方法</p>
<p></p>
<p>cur.execute("exec 存储过程名 @参数1=XXX, @参数2='YYY'......")</p>
<p>cur.fetchone() #如果该存储过程中有返回结果集,可以调用此句,如果存储过程是return,则pymssql不支持,无法获取,此句错误</p>
<p>conn.commit() #如果没有此句,则数据并没有真正生效,比如存储过程是执行insert的,没有commit的话,并不会真正插入数据</p>
<p>一般通过此三步即可以应对很多使用存储过程的要求</p>
<p></p>
<p>对于存储过程传出数据的方法还有如下的讨论:</p>
<p>http://zh-cn.w3support.net/index.php?db=so&amp;id=191644</p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
分享到:
评论

相关推荐

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

    本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下: 在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @...

    2019千峰Python超详细入门教程(百度云盘分享).docx

    ├─千锋Python教程:第01章 第一个Python程序与数据存储及数据类型(9集) │ │ .DS_Store │ │ │ ├─code │ │ 1、数据存储.txt │ │ 2、第一个python程序.py │ │ 3、注释.py │ │ 4、输出与输入.py │ ...

    毕业设计:ASP.NET基于WEB的选课系统(源代码)

    返回数值的存储过程执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令;最后,行为存储过程仅仅是用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。 在使用.NET的过程中...

    这是自动化测试学习过程中涉及到的python代码.rar

    在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言assert。 接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来...

    Python编程入门经典

    17.4 从C向Python返回值 325 17.5 LAME项目 326 17.6 LAME扩展模块 330 17.7 在C代码中使用Python 对象 342 17.8 本章小结 345 17.9 习题 346 第18章 数值编程 347 18.1 Python语言中的数值 347 18.1.1 整数 348 ...

    Python第一阶段笔记汇总.docx

    (二) Python程序的执行方式 7 (三)Linux常用命令 7 (四)执行过程 8 (五)解释器类型 8 (六)调试 9 二 数据基本运算 9 (一)pycharm常用快捷键(编译器) 9 (二) 函数 函数名(参数) 10 (三)变量 存储数据 11 (四...

    Python核心编程第二版

    很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   1.3.5 可...

    Python核心编程第二版(ok)

    Python核心编程第二版(ok) 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   ...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

    原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 ...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

    原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 ...

    Java Runtime() 调用python,python进程刚运行就闪退,以及运行之后进程不关闭且不返回的问题

    2.python进程运行之后不关闭,资源占用为0且迟迟没有返回值。 问题分析:这是因为进程中调用的包会输出一些东西,然后塞满运行窗口的标准输出缓冲区 解决方法:创建一个线程,清空缓冲区 File dir = new File&#40;C:...

    selenium-python-formatters:改进了 Selenium IDE 的格式化程序以输出更有用的 python

    不存储或验证 JavaScript 的返回值。 使用getEval来存储、断言或验证 JavaScript 命令的结果。 dragAndDrop :导出的测试现在使用 ActionChains 执行简单的dragAndDrop命令。 rollup :导出的测试现在扩展存在...

    python之装饰器,多重装饰器,多层函数装饰器

    本质:闭包是将内部函数和外部函数的执行环境绑定在一起的对象。 优点:内部函数可以使用外部变量。 缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存。 作用:实现python装饰器。 闭包三要素: ...

    PAPIMonitor:适用于Android应用的Python API Monitor

    PAPIMonitor(P ython API监控for Android应用程序)是一种基于Python的工具的应用程序执行过程中监视用户选择的API。 该应用程序应安装在已经通过ADB连接到PC主机的仿真器中。 用户可以选择监视预定义的API列表,...

    同步异步write的效率比较

    除了使用系统调用stat外,更简单的方法是利用lseek的返回值来获取文件的长度。 在按每一个给定大小的输出缓冲区计算写文件时间时,应当在开始写之前调用times(),记录下开始时间,然后在整个输入缓冲区都复制到输出...

    Differential-Privacy:一个提供接口以向数据库提供差异私有查询的库

    请按以下方式运行foo.py脚本- python foo.py 该脚本在上执行差异私有查询添加到每个查询的噪声使用拉普拉斯机制,该机制以0为中心,分布参数为1\epsilon 。 您可以在foo.py更改epsilon值。 您应该多次运行脚本以查看...

    jobcontrol:作业调度与跟踪库

    跟踪包括存储: - 函数返回值 - 引发的任何异常 - 任务执行期间产生的日志消息 - 可选的“进度”,如果任务支持它 状态存储与主应用程序完全分离。 项目“核心”目前包括两个存储实现: MemoryStorage将所有数据...

    web-scraping-challenge

    将返回值以mars_mongo数据库的形式存储在Mongo中,作为Python字典。创建一个根路径/,它将查询Mongo数据库并将火星数据传递到HTML模板中以显示数据。创建了一个名为index.html的模板HTML文件,该文件将

    Thinking in java4(中文高清版)-java的'圣经'

    读者评论 前言 简介 第1章 对象导论 1.1 抽象过程 1.2 每个对象都有一个接口 1.3 每个对象都提供服务 1.4 被隐藏的具体实现 1.5 复用具体实现 1.6 继承 1.6.1 “是一个”(is-a)与“像是一个”(is-like-a)关系 ...

Global site tag (gtag.js) - Google Analytics