1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python获取数据库的存储过程_python远程调用sqlserver存储过程记录

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

时间:2018-09-22 12:35:38

相关推荐

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=mit() #提交修改

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]

mit() #提交修改

except Exception,e:

print e

result=-1

finally:

try : conn.close()

except : pass

return result

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