Python ibm_db 异常:[IBM][CLI 驱动程序] SQL4917N 选项数组中的元素 "SQLE_CLIENT_INFO_WRKSTNNAME" 无效。 SQLCODE=-4917
Python ibm_db Exception: [IBM][CLI Driver] SQL4917N Element "SQLE_CLIENT_INFO_WRKSTNNAME" in the option array is not valid. SQLCODE=-4917
尝试使用 ibm_db python 程序包连接到 db2 时出现以下错误。
[IBM][CLI Driver] SQL4917N Element "SQLE_CLIENT_INFO_WRKSTNNAME"
in the option array is not valid. SQLCODE=-4917
这个问题是我的新机器(2019 MacBook Pro)特有的。我从旧机器(2013 年末的 MacBook Pro)的 Time Machine 备份设置了这台机器。完全相同的代码能够在我的旧机器上无错误地连接到数据库。新机器可以使用SQLDeveloper程序连接数据库但不能python.
在不同的服务器上尝试不同的数据库时,错误仍然存在。我正在尝试连接到 Db2 Warehouse on Cloud 服务。
环境:
- 2019 款 MacBook Pro
- macOS 10.14.6 版
- python v. 3.6.8(也试过 3.7.4)
- ibm_db v. 3.0.1
- conda环境(非conda也试过python)
我试过:
- 使用 pip(常规和 sudo,--no-cache-dir)卸载/重新安装 ibm_db
- 将clidriver下载到不同的目录并设置IBM_DB_HOME env var
执行连接方法时出现错误:
import ibm_db
conn = ibm_db.connect(CONN_STRING, "", "")
此时,我希望python连接到数据库,但我得到以下错误:
[IBM][CLI Driver] SQL4917N Element "SQLE_CLIENT_INFO_WRKSTNNAME"
in the option array is not valid. SQLCODE=-4917
db2level 命令
~/anaconda3/envs/ibm/lib/python3.6/site-packages/clidriver/bin/db2level
db2级输出
DB21085I This instance or install (instance name, where applicable: "*") uses
"64" bits and DB2 code release "SQL10055" with level identifier "0606010E".
Informational tokens are "DB2 v10.5.0.5", "special_35187", "DARWIN64105_35187",
and Fix Pack "5".
Product is installed at
"~/anaconda3/envs/ibm/lib/python3.6/site-packages/clidriver".
该错误表明曾试图为 SQLE_CLIENT_INFO_WRKSTNNAME 设置无效值。
Db2 cloud 应该接受最多 255 个字节的值,并且它应该默认为当前主机名,所以 gethostbyname 可能返回了一些无效字符?
确认我们必须在执行期间收集 db2cli 跟踪(以查看它尝试设置的实际值)。
要测试的最简单 Python 代码是 运行
import ibm_db
conn = ibm_db.connect("SAMPLE","db2v111","passw0rd")
stmt = ibm_db.exec_immediate(conn,"select CURRENT client_wrkstnname from sysibm.sysdummy1")
ibm_db.fetch_tuple(stmt)
对我来说,连接工作正常,它 returns 我当前的主机名:
In [6]: ibm_db.fetch_tuple(stmt)
Out[6]: (u'kkuduk',)
您要测试的解决方法是在 db2cli.ini 中放置一些其他值,例如如果我设置:
cat /usr/lib/python2.7/site-packages/ibm_db-2.0.7-py2.7-linux-x86_64.egg/clidriver/cfg/db2cli.ini
[sample]
port=60111
hostname=localhost
database=sample
ClientWrkStnName=OverridenHostname
同样的代码returns:
In [4]: ibm_db.fetch_tuple(stmt)
Out[4]: (u'OverridenHostname',)
正如@mao 和@kkuduk 所建议的,ClientWrkStnName 包含无效字符。这是由于同一网络上我的旧 Mac 和新 Mac 之间的 Mac ComputerName 冲突造成的。前任。 Gray 的 MacBook Pro -> Gray 的 MacBook Pro (2)。通过从终端更改新计算机上的 ComputerName 和 HostName 解决了该问题。
scutil --set ComputerName "graymac"
scutil --set HostName "graymac"
尝试使用 ibm_db python 程序包连接到 db2 时出现以下错误。
[IBM][CLI Driver] SQL4917N Element "SQLE_CLIENT_INFO_WRKSTNNAME"
in the option array is not valid. SQLCODE=-4917
这个问题是我的新机器(2019 MacBook Pro)特有的。我从旧机器(2013 年末的 MacBook Pro)的 Time Machine 备份设置了这台机器。完全相同的代码能够在我的旧机器上无错误地连接到数据库。新机器可以使用SQLDeveloper程序连接数据库但不能python.
在不同的服务器上尝试不同的数据库时,错误仍然存在。我正在尝试连接到 Db2 Warehouse on Cloud 服务。
环境:
- 2019 款 MacBook Pro
- macOS 10.14.6 版
- python v. 3.6.8(也试过 3.7.4)
- ibm_db v. 3.0.1
- conda环境(非conda也试过python)
我试过:
- 使用 pip(常规和 sudo,--no-cache-dir)卸载/重新安装 ibm_db
- 将clidriver下载到不同的目录并设置IBM_DB_HOME env var
执行连接方法时出现错误:
import ibm_db
conn = ibm_db.connect(CONN_STRING, "", "")
此时,我希望python连接到数据库,但我得到以下错误:
[IBM][CLI Driver] SQL4917N Element "SQLE_CLIENT_INFO_WRKSTNNAME"
in the option array is not valid. SQLCODE=-4917
db2level 命令
~/anaconda3/envs/ibm/lib/python3.6/site-packages/clidriver/bin/db2level
db2级输出
DB21085I This instance or install (instance name, where applicable: "*") uses
"64" bits and DB2 code release "SQL10055" with level identifier "0606010E".
Informational tokens are "DB2 v10.5.0.5", "special_35187", "DARWIN64105_35187",
and Fix Pack "5".
Product is installed at
"~/anaconda3/envs/ibm/lib/python3.6/site-packages/clidriver".
该错误表明曾试图为 SQLE_CLIENT_INFO_WRKSTNNAME 设置无效值。 Db2 cloud 应该接受最多 255 个字节的值,并且它应该默认为当前主机名,所以 gethostbyname 可能返回了一些无效字符? 确认我们必须在执行期间收集 db2cli 跟踪(以查看它尝试设置的实际值)。
要测试的最简单 Python 代码是 运行
import ibm_db
conn = ibm_db.connect("SAMPLE","db2v111","passw0rd")
stmt = ibm_db.exec_immediate(conn,"select CURRENT client_wrkstnname from sysibm.sysdummy1")
ibm_db.fetch_tuple(stmt)
对我来说,连接工作正常,它 returns 我当前的主机名:
In [6]: ibm_db.fetch_tuple(stmt)
Out[6]: (u'kkuduk',)
您要测试的解决方法是在 db2cli.ini 中放置一些其他值,例如如果我设置:
cat /usr/lib/python2.7/site-packages/ibm_db-2.0.7-py2.7-linux-x86_64.egg/clidriver/cfg/db2cli.ini
[sample]
port=60111
hostname=localhost
database=sample
ClientWrkStnName=OverridenHostname
同样的代码returns:
In [4]: ibm_db.fetch_tuple(stmt)
Out[4]: (u'OverridenHostname',)
正如@mao 和@kkuduk 所建议的,ClientWrkStnName 包含无效字符。这是由于同一网络上我的旧 Mac 和新 Mac 之间的 Mac ComputerName 冲突造成的。前任。 Gray 的 MacBook Pro -> Gray 的 MacBook Pro (2)。通过从终端更改新计算机上的 ComputerName 和 HostName 解决了该问题。
scutil --set ComputerName "graymac"
scutil --set HostName "graymac"