【发布时间】:2017-07-17 13:56:10
【问题描述】:
我有一个使用 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 页面here 展示了如何使用匿名代码块为 SQL Server 执行此操作。也许可以通过调整 SQL 语法为 Teradata 使用类似的方法。
标签: python stored-procedures output teradata pyodbc