簡體   English   中英

IBM DB2 連接從 docker 到 python 拋出 [IBM] [CLI 驅動程序] SQL1598N

[英]IBM DB2 connection from docker through python throwing [IBM][CLI Driver] SQL1598N

我已經嘗試了多個 docker 圖像,包括 centos7、centos8、debian、python、Z1D41C8590AF58D3ADCE8454。 但每一個地方都是死胡同。 我能夠從同一 docker 構建的節點 js 連接。 Even using python it is successfully connecting to db2 from windows but when I use python in docker it fails with License error

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/

要求.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 )

SQL1598N 是由於使用了 db2 v11.1 許可證文件,您用於連接到 z/OS 的 Db2 或 iSeries 的 Db2。 新的 ibm_db 驅動程序需要 db2 v11.5 db2connect 許可證才能連接到 z/OS 和 iSeries 服務器。 因此,解決 SQL1598N 錯誤的簡單方法是升級許可證文件。 如果您在編輯器中打開 db2consv_*.lic 文件,您可以看到其中提到的版本。 如果您想繼續使用現有的 v11.1 許可證,需要按照以下步驟操作:

  1. 下載https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64/linuxx64_odbc_cli.tar.gz
  2. 解壓它,你會得到 clidriver 目錄。
  3. 導出 IBM_DB_HOME=<full_path_of_clidriver>
  4. 復制 clidriver/license 目錄下的 v11.1 db2consv_*.lic 文件
  5. pip 安裝 ibm_db

它現在應該可以正常工作了。 謝謝。

npm 或 pip 等所有軟件包都從https://public.dhe.ibm.com/ibmdl/datasport/pub/odbcware_cli//////驅動程序中獲取驅動程序他們隨機更新文件而不維護版本。 所有版本都維護在https://www.ibm.com/support/pages/node/323035他們是最新版本的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 版本來解決它

For linux downloaded as there are no 64bit driver for odbc-cli so downloaded IBM Data Server Runtime Client Linux x86 and extracted the v11.1.4fp5_linuxx64_dsdriver.tar.gz and replaced node_modules/ibm_db/installer/ and /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(64 位)的 IBM 數據服務器驅動程序,並將node_modules/ibm_db/installer//usr/local/lib/python3.7/site-packages/替換為ZAEA203489CE3AAAA946B46B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM