首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:[IBM][ ibm_db驱动程序]选项数组中的SQL4917N元素"SQLE_CLIENT_INFO_WRKSTNNAME“无效。SQLCODE=-4917

Python:[IBM][ ibm_db驱动程序]选项数组中的SQL4917N元素"SQLE_CLIENT_INFO_WRKSTNNAME“无效。SQLCODE=-4917
EN

Stack Overflow用户
提问于 2019-09-07 15:14:37
回答 2查看 709关注 0票数 1

当试图使用db2 python包连接到ibm_db时,我会得到以下错误。

代码语言:javascript
复制
[IBM][CLI Driver] SQL4917N  Element "SQLE_CLIENT_INFO_WRKSTNNAME" 
in the option array is not valid. SQLCODE=-4917

这个问题是我的新机器(2019年MacBook Pro)特有的。我从我的旧机器的时间机器备份( 2013年底MacBook Pro)中安装了这台机器。完全相同的代码能够连接到数据库,而不会在我的旧机器上出错。新机器可以使用SQLDeveloper程序连接到数据库,但不能使用python。

在不同的服务器上尝试不同的数据库时,错误仍然存在。我正在尝试连接到云服务上的Db2仓库。

环境:

  • 2019年MacBook Pro
  • macOS诉10.14.6
  • python诉3.6.8 (也尝试3.7.4)
  • ibm_db诉3.0.1
  • conda环境(也尝试了非conda python)

我试过:

  • 用pip卸载/重新安装ibm_db (常规和sudo,--无缓存-dir)
  • 下载客户端驱动程序到不同的目录并设置IBM_DB_HOME env

执行connect方法时会得到错误:

代码语言:javascript
复制
import ibm_db
conn = ibm_db.connect(CONN_STRING, "", "")

此时,我希望python能够连接到数据库,但是我得到了以下错误:

代码语言:javascript
复制
[IBM][CLI Driver] SQL4917N  Element "SQLE_CLIENT_INFO_WRKSTNNAME" 
in the option array is not valid. SQLCODE=-4917

db2level命令

代码语言:javascript
复制
~/anaconda3/envs/ibm/lib/python3.6/site-packages/clidriver/bin/db2level

db2level输出

代码语言:javascript
复制
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".
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-08 17:58:39

正如“毛”和“kkuduk”所暗示的,ClientWrkStnName有一个无效的字符。这是由于我的旧Mac和新Mac在同一个网络上的ComputerName冲突造成的。例如。格雷的MacBook Pro ->格雷的MacBook Pro (2)。该问题通过从终端更改新计算机上的ComputerName和HostName来解决。

代码语言:javascript
复制
scutil --set ComputerName "graymac"
scutil --set HostName "graymac"
票数 1
EN

Stack Overflow用户

发布于 2019-09-08 14:18:08

此错误意味着有人试图为SQLE_CLIENT_INFO_WRKSTNNAME设置无效值。Db2云应该接受最多255个字节的值,并且它应该默认为当前主机名,所以可能有一些由gethostbyname返回的无效字符?要确认我们必须在执行过程中收集db2cli跟踪(查看它试图设置的实际值)。

要测试的最简单的Python代码是运行

代码语言:javascript
复制
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)

对于我来说,连接工作正常,它返回我的当前主机名:

代码语言:javascript
复制
In [6]: ibm_db.fetch_tuple(stmt)
Out[6]: (u'kkuduk',)

测试的一个解决方法是在db2cli.ini中添加一些其他值,例如,如果我设置:

代码语言:javascript
复制
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

相同的代码返回:

代码语言:javascript
复制
In [4]: ibm_db.fetch_tuple(stmt)
Out[4]: (u'OverridenHostname',)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57834978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档