python获取数据库的存储过程_python远程调用sqlserver存储过程记录
開發中需要python遠程調用sqlserver存儲過程。搜索了網上有兩種方式,pymssql和pyodbc。開始采用第一種方式開發,不過無法拿到存儲過程中的返回數據,后采用pyodbc開發,當然存儲過程中返回數據并不是直接return返回,需要設定一個output類型的參數,然后在結束時設置該參數并select一把方可得到返回。網上也有另外一種思路,寫個存儲過程中間件調用目標存儲過程避免每有返回就得select的情況,該方法為驗證。
pymssql 調用代碼
try:
#客戶姓名 客戶消費的店名 貨物ID 領取物資的數量
conn = pymssql.connect(host=host,user=user,password=pwd,
database=db,port=port,charset="utf8")
cur = conn.cursor()
if not cur:
raise(NameError,"連接數據庫失敗")
else:
sql=['set nocount on']
sql.append("exec salesUseMoney @name=%s,@tradName =%s,@goodsid=%s,@quantity=%s,@result=0")
sql.append('declare @return_value int')
sql.append("exec salesUseMoney @name='%s',@tradName ='%s',@goodsid='%s',@quantity=%s,@result=@return_value OUTPUT")
sql.append('select return_result=@return_value')
sql='\n'.join(sql)%(name,tradName,goodsid,quantity)
print sql
result=cur.execute(sql)
print result
result=conn.commit() #提交修改
print result
result=cur.nextset()
print result
print cur.fetchall()
print cur.fetchone()
"""
rows=cur.execute("select storeid,name from store where shopid=13 and upflag=0 and closed='F'")
print rows
print cur.fetchall()
"""
except Exception,e:
print e
finally:
try : conn.close()
except : pass
pyodbc調用代碼:
try:
#客戶姓名 客戶消費的店名 貨物ID 領取物資的數量
connStr="DRIVER={SQL Server};SERVER=%s,%s;DATABASE=%s;UID=%s;PWD=%s"%(host,port,db,user,pwd)
conn = pyodbc.connect(connStr)
cur = conn.cursor()
if not cur:
raise(NameError,"連接數據庫失敗")
else:
sql="""
exec salesUseMoney @name="%s",@tradName="%s",@goodsid=%s,@quantity=%s,@result=0;
"""%(name,tradName,goodsid,quantity)
print sql
cur.execute(sql)
result=cur.fetchone()[0]
conn.commit() #提交修改
except Exception,e:
print e
result=-1
finally:
try : conn.close()
except : pass
return result
總結
以上是生活随笔為你收集整理的python获取数据库的存储过程_python远程调用sqlserver存储过程记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 作用with_即使__in
- 下一篇: python的scramy架构_Scra