从 docker 到 python 的 IBM DB2 连接抛出 [IBM][CLI Driver] SQL1598N
IBM DB2 connection from docker through python throwing [IBM][CLI Driver] SQL1598N
我尝试了多个 docker 映像,包括 centos7、centos8、debian、python、ubuntu。
但每一处都是死胡同。
我能够从同一 docker 构建的节点 js 进行连接。
即使使用 python,它也能从 windows 成功连接到 db2,但是当我在 docker 中使用 python 时,它会因许可证错误
而失败
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 656, in __connect
connection = pool._invoke_creator(self)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 493, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/home/service/ibm_db_dbi.py", line 1188, in connect
raise _get_exception(inst)
sqlalchemy.exc.ProgrammingError: (ibm_db_dbi.ProgrammingError) ibm_db_dbi::ProgrammingError: Exception('[IBM][CLI Driver] SQL1598N An attempt to connect to the database server failed because of a licensing problem. SQLSTATE=42968 SQLCODE=-1598')
DockerFile
FROM python
USER root
WORKDIR /home/service
ADD ./ /home/service
RUN python --version
RUN pip install -r requirements.txt
RUN cp db2consv_ee.lic /usr/local/lib/python3.8/site-packages/clidriver/license/
requirements.txt
ibm_db==3.0.2
ibm-db-sa==0.3.5
SQLAlchemy==1.3.18
Python 脚本
from sqlalchemy import Column, Integer, String, MetaData
from sqlalchemy import create_engine
engine = create_engine("db2+ibm_db://userId:password@host:port/db") #create a database engine
from sqlalchemy.ext.declarative import declarative_base
metadata = MetaData(schema='schemaName')
Base = declarative_base(bind=engine, metadata=metadata)
class Customers(Base):
__tablename__ = 'tableName'
CLIENT_ID = Column(Integer, primary_key=True)
CLIENT_NAME = Column(Integer)
CREATED_BY = Column(String)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
result = session.query(Customers).limit(2)
for row in result:
print (row.CLIENT_NAME )
npm 或 pip 等所有软件包都从 https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/ 获取驱动程序。
他们随机更新文件而不维护版本。
所有版本都在 https://www.ibm.com/support/pages/node/323035 中维护
他们是映射到 link 的最新版本的 clidriver(11.5) 的一些问题
https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/
相反,我可以通过从 https://www.ibm.com/support/docview.wss?uid=ibm11116777
下载 11.1 版本来解决它
下载 linux 因为 odbc-cli 没有 64 位驱动程序所以下载 IBM Data Server Runtime Client Linux x86 并提取 v11 .1.4fp5_linuxx64_dsdriver.tar.gz 并替换了 node_modules/ibm_db/installer/ 和 /usr/local/lib/python3.7/site-packages/ 与 v11.1.4fp5_linuxx64_dsdriver.tar.gz\v11.1.4fp5_linuxx64_dsdriver.tar\dsdriver\odbc_cli_driver\linuxamd64\
对于 windows:用于 ODBC 和 CLI 的 IBM 数据服务器驱动程序(64 位) 并替换为 node_modules/ibm_db/installer/ 和 /usr/local/lib/python3.7/site-packages/ 和 Windows 64bit
SQL1598N 是由于使用了 db2 v11.1 许可证文件,您使用该文件连接到 Db2 for z/OS 或 Db2 for iSeries。新的 ibm_db 驱动程序需要 db2 v11.5 db2connect 许可证才能连接到 z/OS 和 iSeries 服务器。
因此,解决 SQL1598N 错误的简单方法是升级许可证文件。如果您在编辑器中打开 db2consv_*.lic 文件,您可以看到其中提到的版本。
如果您想继续使用现有的 v11.1 许可证,需要按照以下步骤操作:
- 下载https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64/linuxx64_odbc_cli.tar.gz
- 解压后得到clidriver目录
- 导出 IBM_DB_HOME=
- 复制clidriver/license目录下的v11.1 db2consv_*.lic文件
- pip 安装ibm_db
现在应该可以正常工作了。谢谢
我尝试了多个 docker 映像,包括 centos7、centos8、debian、python、ubuntu。 但每一处都是死胡同。 我能够从同一 docker 构建的节点 js 进行连接。 即使使用 python,它也能从 windows 成功连接到 db2,但是当我在 docker 中使用 python 时,它会因许可证错误
而失败File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 656, in __connect
connection = pool._invoke_creator(self)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 493, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/home/service/ibm_db_dbi.py", line 1188, in connect
raise _get_exception(inst)
sqlalchemy.exc.ProgrammingError: (ibm_db_dbi.ProgrammingError) ibm_db_dbi::ProgrammingError: Exception('[IBM][CLI Driver] SQL1598N An attempt to connect to the database server failed because of a licensing problem. SQLSTATE=42968 SQLCODE=-1598')
DockerFile
FROM python
USER root
WORKDIR /home/service
ADD ./ /home/service
RUN python --version
RUN pip install -r requirements.txt
RUN cp db2consv_ee.lic /usr/local/lib/python3.8/site-packages/clidriver/license/
requirements.txt
ibm_db==3.0.2
ibm-db-sa==0.3.5
SQLAlchemy==1.3.18
Python 脚本
from sqlalchemy import Column, Integer, String, MetaData
from sqlalchemy import create_engine
engine = create_engine("db2+ibm_db://userId:password@host:port/db") #create a database engine
from sqlalchemy.ext.declarative import declarative_base
metadata = MetaData(schema='schemaName')
Base = declarative_base(bind=engine, metadata=metadata)
class Customers(Base):
__tablename__ = 'tableName'
CLIENT_ID = Column(Integer, primary_key=True)
CLIENT_NAME = Column(Integer)
CREATED_BY = Column(String)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
result = session.query(Customers).limit(2)
for row in result:
print (row.CLIENT_NAME )
npm 或 pip 等所有软件包都从 https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/ 获取驱动程序。 他们随机更新文件而不维护版本。 所有版本都在 https://www.ibm.com/support/pages/node/323035 中维护 他们是映射到 link 的最新版本的 clidriver(11.5) 的一些问题 https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/
相反,我可以通过从 https://www.ibm.com/support/docview.wss?uid=ibm11116777
下载 11.1 版本来解决它下载 linux 因为 odbc-cli 没有 64 位驱动程序所以下载 IBM Data Server Runtime Client Linux x86 并提取 v11 .1.4fp5_linuxx64_dsdriver.tar.gz 并替换了 node_modules/ibm_db/installer/ 和 /usr/local/lib/python3.7/site-packages/ 与 v11.1.4fp5_linuxx64_dsdriver.tar.gz\v11.1.4fp5_linuxx64_dsdriver.tar\dsdriver\odbc_cli_driver\linuxamd64\
对于 windows:用于 ODBC 和 CLI 的 IBM 数据服务器驱动程序(64 位) 并替换为 node_modules/ibm_db/installer/ 和 /usr/local/lib/python3.7/site-packages/ 和 Windows 64bit
SQL1598N 是由于使用了 db2 v11.1 许可证文件,您使用该文件连接到 Db2 for z/OS 或 Db2 for iSeries。新的 ibm_db 驱动程序需要 db2 v11.5 db2connect 许可证才能连接到 z/OS 和 iSeries 服务器。 因此,解决 SQL1598N 错误的简单方法是升级许可证文件。如果您在编辑器中打开 db2consv_*.lic 文件,您可以看到其中提到的版本。 如果您想继续使用现有的 v11.1 许可证,需要按照以下步骤操作:
- 下载https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64/linuxx64_odbc_cli.tar.gz
- 解压后得到clidriver目录
- 导出 IBM_DB_HOME=
- 复制clidriver/license目录下的v11.1 db2consv_*.lic文件
- pip 安装ibm_db
现在应该可以正常工作了。谢谢