- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经通读了几个讨论这个话题的帖子——但是——没有找到一个似乎最适合我的用例的选项。
Linux (RHEL 7.x)
- IBM iSeriesAccess 驱动
- 连接到 AS/400
- Python/pyodbc(ibm_db 似乎不支持 iSeriesAccess 驱动程序)
调用存储过程——调用运行良好——数据按预期返回。问题是这是一组已经存在多年的过程,也被其他系统使用,而其他系统(即 SQL Server)能够正确检索输出参数,我们发现这对 pyodbc 来说是一个挑战.
使用一个非常基本的脚本来描述这一点——只有预期的数据行在结果集中——而不是输出参数(这是我在其他线程上看到的捕获输出参数的例子。
import pyodbc
connection = pyodbc.connect("dsn=DEV; UID=USER; PWD=PASSWD")
if connection:
crsr = connection.cursor()
# PARM 2 is an OUTPUT parameter type
parms = (23,0)
crsr.execute("{CALL GET_DATA(?, ?)}", parms)
rows = crsr.fetchall()
while rows:
print(rows)
if crsr.nextset():
rows = crsr.fetchall()
else:
rows = None
else:
print connection
print "error connection"
最佳答案
看来 PyODBC 没有实现 callproc
。他们确实记录了一个 way绕过某些数据库的此限制,但这不适用于 Db2。我能看到获取值的唯一方法是使用全局变量:
import pyodbc
connection = pyodbc.connect("dsn=DEV; UID=USER; PWD=PASSWD")
if connection:
crsr = connection.cursor()
crsr.execute("create or replace variable out_parm integer default 0"))
crsr.execute("call GET_DATA(?, out_parm)", (23,))
rows = crsr.fetchall()
while rows:
print(rows)
if crsr.nextset():
rows = crsr.fetchall()
else:
rows = None
crsr.execute("values(out_parm)")
print(crsr.fetchall())
else:
print connection
print "error connection"
原答案:
您需要使用 callproc而不是 execute
。
import pyodbc
connection = pyodbc.connect("dsn=DEV; UID=USER; PWD=PASSWD")
if connection:
crsr = connection.cursor()
# PARM 2 is an OUTPUT parameter type
parms = (23,0)
out_parms = crsr.callproc("GET_DATA", parms)
rows = crsr.fetchall()
while rows:
print(rows)
if crsr.nextset():
rows = crsr.fetchall()
else:
rows = None
else:
print connection
print "error connection"
关于linux - pyodbc python linux iSeriesAccess 驱动程序-存储过程-捕获输出参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48808714/
我已经通读了几个讨论这个话题的帖子——但是——没有找到一个似乎最适合我的用例的选项。 Linux (RHEL 7.x) - IBM iSeriesAccess 驱动 - 连接到 AS/400 - Py
我正在通过 php 连接到 IBM AS 400 服务器。 ODBC 驱动程序已正确安装,我可以通过浏览器执行所有操作。 但是当我在 linux 终端 (php -f filename.php) 上执
我是一名优秀的程序员,十分优秀!