python获取数据库的存储过程_python远程调用sqlserver存储过程记录

开发中需要python远程调用sqlserver存储过程。搜索了网上有两种方式,pymssql和pyodbc。开始采用第一种方式开发,不过无法拿到存储过程中的返回数据,后采用pyodbc开发,当然存储过程中返回数据并不是直接return返回,需要设定一个output类型的参数,然后在结束时设置该参数并select一把方可得到返回。网上也有另外一种思路,写个存储过程中间件调用目标存储过程避免每有返回就得select的情况,该方法为验证。

pymssql 调用代码

try:

print

#客户姓名 客户消费的店名 货物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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值