Python调用SQL Server存储过程:adodbapi与pymssql实战对比

花开有时
花开有时
发布时间:2026-10-13 | 2人浏览过
原创

本文详细介绍在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程序设计工作有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表