在从Python pyodbc调用SQL Server中的存储过程时遇到问题
这是一个常见的问题,如果是这样的话,我已经从其他问题中获得了一些好的线索,但我仍然没有成功。
我在SQL Server中有一个复杂的存储过程,它执行一系列操作来填充表。它不接受任何参数,也不返回任何字段。在我调用SP之后,我查询表--我需要成批处理大量数据,这很好用。从Python调用SP是最困难的部分。
def executeSP():
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' +
server+';DATABASE='+database+';UID='+username+';PWD=' + password)
cnxn.autocommit = True
cursor = cnxn.cursor()
cursor.execute("SET NOCOUNT ON; exec [schema].[SPName]")
cursor.close()
del cursor
cnxn.close()
我将NOCOUNT设置为ON,这样,在返回之前,python将等待SP完成。但当我运行此命令时,系统不会调用SP。相同的连接参数可用于查询相同模式中的表。不会产生任何错误。
我没有主意了。
解决方案
将NOCOUNT设置为ON并不总是足够。可以肯定的是,循环直到pyodbc认为没有更多的结果集,或者您可以在执行完成之前取消执行。例如
cursor.execute(sql)
while cursor.nextset():
pass
cursor.close()
相关文章