我正在开发一个需要连接到ibm db2数据库的应用程序。使用DBeaver,我可以成功连接到数据库(我为他提供了 db2cc.jar 和 db2cc4.jar 文件)。
在我看来,因为DBeaver使用我的Window凭据登录,因为我不需要输入任何登录名或密码即可连接。
现在,我一直在尝试使用python 3.7和pypi的最新版本的 ibm_db 软件包连接到同一数据库。我什么也没安装。
import ibm_db
# ...
connection_string = "DATABASE=" + self.params['schema'] + ";" + \
"HOSTNAME=" + self.params['host'] + ";" + \
"PORT=" + self.params['port'] + ";" + \
"PROTOCOL=TCPIP;" + \
"SECURITYMECHANISM=4;" + \
"UID=" + self.params['user'] + ";" + \
"PWD=" + self.params['password'] + ";"
try:
self.connection = ibm_db.connect(connection_string, "", "")
# ...
在参数中使用Windows凭据,我收到以下错误消息:
Connection error
Bad credentials
SQLCODE=-30082
08001
根据我在堆栈溢出中看到的连接到db2数据库的情况很复杂...
有人知道如何连接吗?使用Windows凭据还是其他方式...
谢谢!
答案 0 :(得分:0)
如果您的db2客户机和服务器位于同一主机上,请尝试以下连接字符串。 根据具体情况,更改“ mydb”和“ DB2”(db2实例名称,可以使用db2ilist实用程序获取)常量。
[[1]]
value weight
56.75139 1
[[2]]
value weight
61.18781 1
[[3]]
value weight
56.75139 1
[[4]]
value weight
61.18781 1
答案 1 :(得分:0)
Db2在Python上可以正常工作。
开始之前,您需要了解一些基本知识,例如:
在开始之前请先了解这些基础知识。您必须与运行Db2服务器的人员交谈。
注意:在您的问题中,您提到(SecurityMechanism=4
)com.ibm.db2.jcc.DB2BaseDataSource.USER_ONLY_SECURITY-这与非Java客户端无关,与数据库管理器为DERBY相关。 / p>
对于python,ibm_db软件包不是Java应用程序。
DBeaver是一个Java应用程序(因此它使用db2jcc.jar或db2jcc4.jar和许可证文件来连接到远程数据库)。
当该Db2数据库在Microsoft-Windows上运行并且该凭据在运行Db2服务器的主机名上起作用时,您只能使用Windows凭据来连接到Db2数据库。对于任何其他组合,管理员必须向您颁发与目标主机名相关的用户ID /密码。
ibm_db软件包需要安装Db2-client。 Db2-client是一个单独的可安装文件。 different kinds of Db2-client取决于运行您的Db2服务器的操作系统以及您的Db2客户端需要具备的功能。如果您的远程Db2服务器在Linux,Unix,Windows或Z / OS上运行,则可以使用“ IBM数据服务器运行时客户端”,您可以从IBM的护照优势网站下载该文件,也可以从内部IT人士那里获取。如果Db2服务器在i系列(AS / 400)上运行,则应从i系列管理员那里获取其驱动程序。对于Z / OS或i系列,您将另外需要一个许可证文件(这需要花钱),并且您应该从管理员那里获取许可证文件,除非您的公司使用称为Db2-connect的网关产品,在这种情况下,您不需要工作站上的单独许可证文件。
答案 2 :(得分:0)
添加 ibm_db 库,并将ibm_db导入.py文件的顶部。
def get_db_connection():
"""
This will help to get db2 connection for query execution
:return: conn
"""
dsn_driver = "{IBM DB2 ODBC DRIVER}"
dsn_database = "BLUDB"
dsn_hostname = "your_hostname"
dsn_port = "50000"
dsn_protocol = "TCPIP"
dsn_uid = "your_userid"
dsn_pwd = "your_pwd"
dsn = (
"DRIVER={0};"
"DATABASE={1};"
"HOSTNAME={2};"
"PORT={3};"
"PROTOCOL={4};"
"UID={5};"
"PWD={6};").format(dsn_driver, dsn_database, dsn_hostname, dsn_port, dsn_protocol, dsn_uid, dsn_pwd)
try:
conn = ibm_db.connect(dsn, "", "")
print("Connected!")
return conn
except Exception:
print("\nERROR: Unable to connect to the \'" + dsn_database + "\' server.")
print("error: ", ibm_db.conn_errormsg())
exit(-1)
function get_db_connection()将返回连接对象。您可以在该连接对象上执行以下操作:
conn = get_db_connection()
list_results = []
select_query = 'SELECT a.STATUS, a.ID FROM "TABLE_NAME" AS a'
print(select_query)
selectStmt = ibm_db.exec_immediate(conn, select_query)
while ibm_db.fetch_row(selectStmt) != False:
list_results.append(ibm_db.result(selectStmt, 'ID'))
ibm_db.close(conn)