我正在尝试使用 Python 连接到云上的 Db2 数据库。
dsn_hostname = ".."
dsn_uid = ".."
dsn_pwd = ".."
dsn_driver = "{IBM DB2 ODBC DRIVER}"
dsn_database = ".."
dsn_port = ".."
dsn_protocol = "TCPIP"
dsn_security = "SSL"
dsn = (
"DRIVER={0};"
"DATABASE={1};"
"HOSTNAME={2};"
"PORT={3};"
"PROTOCOL={4};"
"UID={5};"
"PWD={6};"
"SECURITY={7};").format(dsn_driver, dsn_database, dsn_hostname, dsn_port, dsn_protocol, dsn_uid, dsn_pwd,dsn_security)
try:
conn = ibm_db.connect(dsn, "", "")
print ("Connected to database: ", dsn_database, "as user: ", dsn_uid, "on host: ", dsn_hostname)
except:
print ("Unable to connect: ", ibm_db.conn_errormsg() )
但是,我收到此错误-:
SQLCODE=-1042ect:[IBM][CLI 驱动程序] SQL1042C 发生意外的系统错误。
SQLSTATE=58004
尽管 clidriver 报告的 SQL1042C 有多种可能的原因,但此答案解决了一个常见原因。
如果您使用 python 和 clidriver 运行 Microsoft Windows,那么您可能会受到 IBM clidriver(当您安装 python ibm_db 模块时默认安装)中的缺陷的影响。 此问题仅影响部分 MS-windows 工作站,而不是全部,这取决于已安装的内容以及 PATH 上已有的内容。
clidriver 以 DLL 文件的形式提供 Microsoft Visual C++ VC12 运行时的副本,但 clidriver 可能无法在运行时加载所需的 DLL 文件,然后给出无用的错误消息,且未提及问题的真正原因。通常,无法加载 vc 运行时的原因是 Windows 操作系统没有被告知在哪里可以找到所需的文件,这些文件位于 clidriver 的子目录中。
有一个解决方法,如下所述,在启动 python 脚本之前将所需的 DLL 文件放在 PATH 上。
使用
pip show ibm_db
查找 Python 站点包目录的“位置:”。例如,假设“位置:”是 c:\python\lib\site-packages
您的站点包目录将位于不同的位置,但请尝试理解这个想法。
修改 PATH 环境变量值以附加以下目录(例如):
c:\python\lib\站点包