繁体   English   中英

如何使用 python package sqlalchemy 与 DSN 服务器而不是主机/端口连接到 ibm_db2 数据库

[英]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.3ibm_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 驱动程序管理器注册)
  • 在 python 代码中使用(引用后) 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.

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