[英]How to connect to ibm_db2 database using python package sqlalchemy with the DSN server instead of host/port
我想使用 DSN 创建 sqlalchemy 引擎
driver='db2+ibm_db'
dsn='BLUDB'
url = f'{driver}://{user}:{password}@{dsn}/{db}'
create_engine(url).connect()
目前我的代码是主机和端口,它工作正常,但我们想用 dsn 更新它
from sqlalchemy import create_engine
from sqlalchemy.engine import Connection
driver='db2+ibm_db'
url = f'{driver}://{user}:{password}@{host}:{port}/{db}'
if params:
url = f'{url}?{params}'
create_engine(url).connect()
在尝试将其与 DSN 连接时,它会抛出以下错误
Traceback (most recent call last):
File "C:\...\env\lib\site-packages\ibm_db_dbi.py", line 599, in connect
conn = ibm_db.connect(dsn, '', '', conn_options)
SQLCODE=-1336M][CLI Driver] SQL1336N The remote host "BLUDB" was not found. SQLSTATE=08001
此答案与版本有关:python ibm_db v3.0.3
, ibm_db_sa v0.3.6
截至 2021 年 3 月。
create_engine()
的db2+ibm_db2
前缀在ibm_db_dbi.py
中运行connect
,该文件经过硬编码,除了凭证之外还需要主机名和端口。
您可以使用pyodbc
(作为 DBAPI 驱动程序)获得 DSN 连接,并在外部配置 DSN 详细信息。 方言仍然是db2
。
如果使用clidriver
,则通过 XML 文件db2dsdriver.cfg
配置 DSN。 相反,如果您使用 Db2 胖客户端,您可以使用 odbcad32 gui 定义 DSN,但ibm_db
模块默认附带的微型clidriver
是非 GUI 的,因此配置是通过 XML 文件或旧版db2cli.ini
。
以下对我有用(使用默认clidriver
)提供 DSN 连接:
pip install pyodbc
db2dsdriver.cfg
中手动配置我的 DSN(对于 bludb)db2cli validate
(验证 db2dsdriver.cfg 中的db2dsdriver.cfg
语法是否正确)db2cli validate -connect -dsn bludb -user XXX -passwd YYYY
db2cli registerdsn -add -alldsn
(向 MS ODBC 驱动程序管理器注册)engine = create_engine('ibm_db_sa+pyodbc://'+uid+':'+pwd+'@bludb')
engine = create_engine('db2+pyodbc://'+uid+':'+pwd+'@bludb')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.