Python调用SQL Server存储过程:adodbapi与pymssql实战对比
本文详细介绍在Python中执行SQL Server存储过程的两种常用方法:adodbapi和pymssql。通过对比分析,指出adodbapi调用简单但无法获取错误代码,而pymssql需构造SQL语句但能完整获取返回值和错误信息。文章重点解析了使用pymssql时的关键步骤,包括参数传递、结果集获取及事务提交,帮助开发者根据实际需求选择合适的技术方案。
本文通过具体实例,讲解在Python环境中调用存储过程并获取其返回值的具体实现方式,旨在为相关开发者提供实用的参考方案。
在Python中调用存储过程,主要可以通过以下几种方式实现:
首先,我们需要明确存储过程的基本定义结构,通常包含输入参数、输出参数及返回值。
ALTER procedure [dbo]. [mysp] @Station varchar ( 50), @SN varchar ( 50), @Info varchar ( 500) output , @Msg varchar ( 500) output
1. 使用adodbapi库
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库
from pymssql import connect
server = 'dbserver'
user = 'user'
password = 'password'
database = 'database'
sp = 'sp'
station = 'station'
sn = 'sn'
sql = ['set nocount on' ]
sql.append('declare @Msg varchar(500)' )
sql.append('declare @return_value varchar' )
sql.append("exec @return_value = %s @Station = '%s', @SN = '%s', @Info = '@Info', @Msg = @Msg output" )
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不支持直接获取,调用此句会报错。 conn.commit() # 若不调用此方法,数据变更(如insert操作)不会真正生效,必须提交事务以确保数据持久化。
通常,通过上述三个步骤即可满足大多数存储过程的调用需求。
更多关于Python数据库操作的内容,可参考本站相关专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文的总结与示例能对您的Python程序设计工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









