1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python return返回值在计算机内的存储形式_Python如何执行存储过程 获取存储过程返回值...

python return返回值在计算机内的存储形式_Python如何执行存储过程 获取存储过程返回值...

时间:2021-12-11 19:48:49

相关推荐

python return返回值在计算机内的存储形式_Python如何执行存储过程 获取存储过程返回值...

在Pathon中如何执行存储过程呢?可以使用如下方法:

存储过程定义基本如下:

ALTER procedure [dbo]. [mysp]

@Station varchar ( 50),

@SN varchar ( 50),

@Info varchar ( 500) output ,

@Msg varchar ( 500) output

1. 使用adodbapi

Python代码

from adodbapiimport connect

server='dbserver'

user='username'

password='password'

database='database'

sp='sp'

station='station'

sn='sn'

try :

db=connect('Provider=SQLOLEDB.1 ;DataSource=%s;InitialCatalog=%s;/

UserID=%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 'snisok.Canbetestatthisstation'

else :

print msg[-1 ]

finally :

try :db.close()

except :pass

2. 使用pymssql

Python代码

from pymssqlimport connect

server='dbserver'

user='user'

password='password'

database='database'

sp='sp'

station='station'

sn='sn'

sql=['setnocounton' ]

sql.append('declare@Msgvarchar(500)' )

sql.append('declare@return_valuevarchar' )

sql.append("exec@return_value=%s@Station='%s',@SN='%s',@Info='@Info',@Msg=@Msgoutput" )

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不支持,无法获取,此句错误

mit() #如果没有此句,则数据并没有真正生效,比如存储过程是执行insert的,没有commit的话,并不会真正插入数据

一般通过此三步即可以应对很多使用存储过程的要求

对于存储过程传出数据的方法还有如下的讨论:

http://zh-/index.php?db=so&id=191644

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。