我有一个存储过程,我使用Python脚本和Pyodbc模块调用。代码如下所示:用python捕获存储过程输出pyodbc
import pyodbc
pyodbc.pooling=False
oConnexion = pyodbc.connect("driver={Teradata};dbcname=myServer;DefaultDatabase=myDB;uid=myUser;pwd=myPassword;charset=utf8;", autocommit=True)
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
oConnexion.setencoding(encoding='utf-8')
oCursor = oConnexion.cursor()
oQueryRegisterBatch = "CALL DEV_AUDIT.SP_AUDIT_BATCH('ED_DATA_QUALITY_MANUAL', 'REGISTER', '1900-01-01 00:00:00.000000', '2999-12-31 00:00:00.000000');"
oCursor.execute(oQueryRegisterBatch)
for row in oCursor:
print (row)
存储过程创建一个新的记录,并返回该记录ID(BATCH_KEY)。当我在Teradata中执行存储过程时,它会正确返回BATCH_KEY,但我无法在Python中捕获它。我收到以下错误消息,而不是价值:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: No results. Previous SQL was not a query.
我可以通过查询表调用存储过程后取回BATCH_KEY但我想避免的。您能否请告知如何捕获存储过程的输出?
由于
pyodbc Wiki页面[此处](https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures)显示了如何使用匿名代码块为SQL Server执行此操作。通过调整SQL语法,也许可以为Teradata使用类似的方法。 –