【问题标题】:Python 3 and IBM_DB Setup IssuesPython 3 和 IBM_DB 设置问题
【发布时间】:2017-12-30 05:55:57
【问题描述】:

我目前使用的是 Windows 10 机器和 Python 3.6.3,并已下载并安装了此处列出的要求: https://www.ibm.com/support/knowledgecenter/en/SSSNY3_10.1.0/com.ibm.swg.im.dbclient.python.doc/doc/t0054367.html 来自以下链接:

https://www.ibm.com/support/knowledgecenter/en/SSSNY3_10.1.0/com.ibm.swg.im.dbclient.python.doc/doc/r0054697.html

我已经安装了 ODBC 驱动程序(IBM DB2 ODBC 驱动程序)并在我的 Windows 10 机器上的 ODBC 数据源管理器界面中对其进行了配置。我还使用适当的设置为 SQL Server 连接完成了此操作。

我遇到的问题是我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\<Username>\Python\Test IBM Connection.py", line 6, in <module>
    ibm_db.connect("<DSN>","<Username>","<Password>")
Exception: [IBM][CLI Driver] SQL1531N  The connection failed because the name
specified with the DSN connection string keyword could not be found in either 
the db2dsdriver.cfg configuration file or the db2cli.ini configuration file.  
Data source name specified in the connection string: "<DSN>".
 SQLCODE=-1531

我当然已经用谷歌搜索了这个问题,但无济于事。我是 IBM_DB 的新手,它要求并需要帮助配置 DSN 才能正常工作。

我也尝试过运行 db2dsdcfgfill - 但没有成功,请参见此处: https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.5.0/com.ibm.swg.im.dbclient.config.doc/doc/r0054557.html

我不确定这些文件中需要包含哪些信息,它们需要在哪里以及如何注册它们以便系统看到它们。

我已经能够连接和查询 SQL Server,但无法连接到 IBM iSeries AS400 系统。

我已经研究了我遇到的问题的许多部分,但没有找到任何解决我的问题的方法。

根据要求,我添加了以下信息:

连接字符串:

ibm.connect("<DSN>", "<Username>","<Password>")

ODBC 版本为 11.01.00.1527

我正在连接到 IBM iSeries 数据库 - 它在系统 i 上运行并且运行版本 7.2

【问题讨论】:

  • 编辑问题以显示连接语句的代码行,并说明安装了 IBM DB2 ODBC 驱动程序的哪个版本+修订包,以及您是连接到本地数据库还是远程数据库数据库(如果远程,哪个操作系统运行 Db2 服务器)
  • 添加信息。
  • 您选择使用短语法进行连接(即通过 DSN),那么您是否使用 Windows odbcad32 工具验证了您可以成功连接到该 DSN?换句话说,首先证明您的 ODBC 连接在 python 之外有效。如果您使连接在 odbcad32 中工作,则副作用是将相关条目添加到 Db2 客户端配置文件(例如 db2cli.ini 或 db2dsdriver.cfg)。你也可以在python中选择长形式的连接(指定目标主机名或IP地址、端口号、数据库名称等)。
  • mao 当我检查是否可以通过 ODBC 连接进行连接时,我收到一条错误消息,指出在 db2dsdriver.cfg 或 db2cli.ini 中都找不到 DSN - 这些是相同的我在 python 中遇到的错误 - 我需要知道如何配置这些文件。 IBM 文档不是很有见地,我在网上找到的其他帖子都没有解决这个特定的错误(我一直无法找到一个很好的例子)
  • Parfait 我用的是Windows 10所以你指的设置不一样,不过谢谢你的回复!

标签: python python-3.x db2


【解决方案1】:

这个答案展示了一些如何使用 db2cli.exe 配置 db2dsdriver.cfg 的示例

请记住,您不需要在 python 中使用 DSN 来连接 Db2 数据库,您可以使用长格式的连接来指定连接的所有详细信息。当 DSN 被多个不同的本地应用程序使用时(因此配置仅在一个地方),或者当您的 python 脚本需要在多个环境上运行时,使用 DSN 很有用,这些环境可能使用不同的 DSN 详细信息而无需更改代码以及 DSN 的位置受不同组的控制,或者当 DSN 参数是特定于环境的。因此,请选择最适合您企业的方法。

如果您必须使用 DSN,请根据您的环境和要求选择 user-dsn 或 system-dsn。

选择要用于 Db2 客户端的配置文件格式。 db2cli.ini 是一个旧格式的 Windows 样式 INI 文件,其中 x=y 元组和纯文本的 [section] 块。您可以使用文本编辑器或 Db2 的命令行命令来操作其内容。这种旧格式有足够的在线文档,并且已经存在了几十年,所以我不会对此进行扩展。

db2dsdriver.cfg 文件是更新的格式。它是一个 XML 文件。您可以使用 Db2 命令(Windows 上的 db2cli.exe)或通过文本编辑器(或 XML 编辑器)对其进行编辑。我会将此格式用于具有当前支持的 Db2 客户端的新环境。作为它的 XML,有一个验证步骤(db2cli validate ...)。

在线 Db2 知识中心提供所有这些信息,尽管您确实需要花时间研究许多页面并仔细排练和测试。

这里是批处理文件脚本的一些示例行,您可以在 MS-windows 上的 ADMINISTRATOR db2cmd.exe 窗口中运行它们,它显示了如何使用 db2cli.exe 工具来填充 db2dsdriver.cfg。您必须至少拥有本地管理员权限才能运行这些命令。

首先设置一些变量以匹配您的特定环境、端口号、Db2 服务器的主机名、凭据和 DSN 以及远程数据库名称(这两个可以是不同的值)。然后运行 ​​db2cli 以使用先前设置的变量将条目写入 db2dsdriver.cfg,最后运行 db2cli 以尝试连接到 DSN。 这些都是些微不足道的例子,在实际情况下,您经常需要向数据库部分或 DSN 部分添加许多附加参数(不同平台上的 Db2 支持许多您可以在连接时设置的选项)。您可以通过 db2cli writecfg add 语法设置其中的任何一个,尽管 IBM 的文档在这方面的帮助不大。 这些示例假定您的 db2dsdriver.cfg 当前为空。 您可能需要其他参数来连接到 Db2 for i。我的示例适用于 Db2 for LUW。您还需要相关许可证。将下面的示例保存到批处理文件中,更改值以适合您的环境,然后在开发或测试环境中进行练习。

set db2_port=port_number_on_which_db2_is_listening

set db2_server=ip_address_or_fqdn_of_db2_server

set db2_id_to_connect=myusername

set db2_id_pwd=password

set dsn_name=sample

set db_name=sample


db2cli writecfg add -dsn %dsn_name% -database %db_name% -host %db2_server% -port %db2_port%  


db2cli writecfg add -database %db_name% -host %db2_server% -port %db2_port% 

db2cli validate -dsn %dsn_name% -connect -user %db2_id_to_connect% -passwd %db2_id_pwd% 

【讨论】:

  • 这帮助我注册了我需要的东西 - 谢谢!!
  • 您能说出为什么大多数示例显示端口 50000 而 IBM 列出了 TCPIP 446 的默认值吗?我能够得到响应的唯一端口是 446,但响应是我没有连接的特权。当我尝试 50000 时,我只收到“检测到通信错误”。我认为这意味着在该端口上没有任何监听。我希望使用 DSN 来绕过端口规范,但您的回答表明仍然需要这样做。
  • @scott.se Db2-server 侦听的默认 TCPIP 端口取决于 Db2-server platform (Z/os , i-series (os/400) , Linux/Unix/Windows)。每个站点都可以选择自己未使用的端口号。对于 Db2 for Z(大型机),您可能会看到端口 446。对于 Unix/Linux/Windows 上的 Db2-server,您可能会看到 50000 或 60000 等。客户端和服务器之间通过 TCP 的连接需要一个端口-number 始终,无论它在哪里指定。
  • @mao 谢谢你;我们使用的是 i 系列,但我无法连接到我看到的 60000 个端口。您是否认为我在端口 446 上的错误表明我根本无权以这种方式连接,即使我可以通过 ODBC 连接?有没有办法查看我的 ODBC 连接使用的端口,或者通过 ibm_db 强制使用相同类型的连接?
猜你喜欢
  • 1970-01-01
  • 2022-12-23
  • 2010-10-28
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2015-01-27
相关资源
最近更新 更多