python - 如何在 Python 中连接到 DB2 数据库?
问题描述
我正在尝试将 Python 连接到使用 DB2 的 AS/400 系统。我实际拥有的代码是:
from ibm_db import connect
connection = connect('DATABASE=<DB>;'
'HOSTNAME=<HOST_IP>;'
'PORT=<PORT>;'
'PROTOCOL=TCPIP;'
'UID=<USER>;'
'PWD=<PASSOWRD>;', '', '')
所有这些都与我的信息有关。
但是当我尝试建立连接时,我从 Python 终端收到此错误:
Exception: [IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "<IP>". Communication func SQLCODE=-30081the error: "connect". Protocol specific error code(s): "10061", "*", "*". SQLSTATE=08001
我已经在 AS/400 中检查了该端口正在使用“netstat”命令进行侦听。
IBM 文档对此帮助不大,有人知道任何可能的解决方案吗?
解决方案
连接到 db2 数据库的最有效方法是通过 ODBC。
如果您在 Windows 下工作,首先您应该在“用户 DSN”选项卡下创建一个新的 odbc 连接(即"AS400"
)
然后,您可以连接到它:
import pyodbc
conn_db2 = pyodbc.connect('DSN=AS400; UID=my_id; PWD=my_password')
要获取表,您可以使用:
import pandas as pd
query = f'''SELECT * FROM mytable'''
table = pd.read_sql(query, conn_db2)
conn_sql.close()
推荐阅读
- mysql - 我们如何使用 MySQL 单查询获得多列计数(TOP)?
- python - 为 setuptools 配置可信主机
- grep - 在许多只有部分感兴趣的文件(目标文件)中搜索缺失的字符串
- makefile - GNU Make忽略通配符指定的虚假规则?
- symfony - 仅带有 CSRF 令牌的表单
- sql - 如果您从选择中获得结果,则忽略 where 中的子句
- typescript - 获取无效的 Chai 属性:'callWith'
- php - 表名和列名的命名策略(Doctrine ORM)
- firebird - 将双精度列转换为日期时的舍入伪影
- c - 为什么 memset 在 calloc 之后调用?