Python如何執行儲存過程,獲取儲存過程返回值

2021-05-26 07:36:44 字數 2410 閱讀 1000

在pathon中如何執行儲存過程呢?可以使用如下方法:

儲存過程定義基本如下:

alter

procedure

[dbo].

[mysp]       

@station varchar

( 50),

@sn varchar

( 50),

@info varchar

( 500)

output

,        

@msg varchar

( 500)

output

1. 使用adodbapi

python**  

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

python**  

from  pymssql import  connect  

server = 'dbserver'

user = 'user'

password = 'password'

database = 'database'

sp = 'sp'

station = 'station'

sn = 'sn'

sql = ['set nocount on' ]  

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=***, @引數2='yyy'......")

cur.fetchone()        #如果該儲存過程中有返回結果集,可以呼叫此句,如果儲存過程是return,則pymssql不支援,無法獲取,此句錯誤

conn.commit()        #如果沒有此句,則資料並沒有真正生效,比如儲存過程是執行insert的,沒有commit的話,並不會真正插入資料

一般通過此三步即可以應對很多使用儲存過程的要求

對於儲存過程傳出資料的方法還有如下的討論:

C 如何執行儲存過程

以oracle為例,其它資料庫僅改變資料庫物件就可以。下面是帶引數的,不帶引數的話paramete為null即可。引數對應 public static int uploadstartclosesoftinfo string args return sdprovider.runprocedure 儲存...

C 如何執行儲存過程

以oracle為例,其它資料庫僅改變資料庫物件就可以。下面是帶引數的,不帶引數的話paramete為null即可。引數對應 public static int uploadstartclosesoftinfo string args oracleparameter parameter1 new or...

ASP中如何執行儲存過程?

1.什麼是儲存過程?儲存過程是sql server所提供的tranact sql語言所編寫的程式。2.如何建立儲存過程?create procedure employeeid orders employeeid as int as select from orders where employeei...