繁体   English   中英

无法从 python 连接到 Db2

[英]Cannot connect to Db2 from python

我使用pip install ibm_db ibm_db创建了一个包含以下内容的db2dsdriver.cfg文件:

<configuration>
  <dsncollection>
    <dsn alias="BANK0002" name="BANK0002" host="localhost" port="50000"/>
  </dsncollection>
  <databases>
    <database name="BANK0002" host="BANK0002" port="50000"/>
  </databases>
</configuration> 

运行此命令行,我可以连接数据库并允许我运行 select 语句而没有问题:

db2cli execsql -user DB2INST1 -passwd xxxxx -dsn bank0002

问题是我无法从 Python 连接:

conn = ibm_db.connect("UID=DB2INST1;PWD=xxxxxx;DATABASE=bank0002;
       HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", "", "")

抛出:

SQLCODE=-30082n: [IBM][CLI Driver] SQL30082N 安全处理失败,原因为“17”(“UNSUPPORTED FUNCTION”)。 SQLSTATE=08001

这是什么问题以及如何解决?

python -V
Python 3.8.5


pip show ibm_db
Name: ibm-db
Version: 3.0.2
Summary: Python DBI driver for DB2 (LUW, zOS, i5) and IDS
Home-page: http://pypi.python.org/pypi/ibm_db/
Author: IBM Application Development Team
Author-email: opendev@us.ibm.com
License: Apache License 2.0
Location: c:\tools\miniconda3\envs\env38\lib\site-packages

您正在使用 miniconda / anaconda 提供的 python 构建,这可能是决定因素。

一种解决方法是使用 conda 在本地构建 ibm_db 并从本地安装新构建的 package。 其他解决方法可能是可能的。

构建 conda 包和安装它们的说明在这里和相关页面。

For Win10 x64 20H2 with anaconda 2020.11 (4.9.2) the following commands let me use python ibm_db module to connect to Db2, at least from the anaconda prompt.

  • 为 Microsoft Windows x64 安装 Anaconda 2020.11。
  • 在管理员模式的 Anaconda3 提示符 window 中运行这些命令(确保每个命令在运行下一个命令之前成功完成):
  • conda install conda-build git anaconda-clean m2-patch
  • conda update conda conda-build git m2-patch
  • cd /d %userprofile%
  • 如果目录ibm_db存在,则重命名或删除它。
  • conda skeleton pypi ibm_db
  • conda-build ibm_db
  • conda install --use-local ibm_db

If you now run conda list , it's output should contain ibm_db module, and the python (3.8.5) will connect to Db2, at least when used in the anaconda prompt window.

如果您继续遇到相同的 SQL1042C 症状,请确认 PATH 上没有其他 Db2 产品(除了clidriver\bin ),然后在启动 python 之前将两个附加目录添加到 PATH。 这些是clidriver\bin\icc64clidriver\bin\amd64.vc12.crt (或任何 amd64.vc.XX.crt 存在于 clidriver\bin 下)的完全限定路径名。 这通常不需要,某些特定配置的 clidriver 存在缺陷,因此需要这样做,IBM 应在未来某个时间提供修复 (IT34327)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM