有没有办法to connect python to DB2
?
答案 0 :(得分:15)
很难找到文档,一旦找到它,就会非常糟糕。这是我在过去3小时内发现的内容。
您需要使用ibm_db
安装pip
,如下所示:
pip install ibm_db
您需要创建一个连接对象。 The documentation is here.
这是我写的:
from ibm_db import connect
# Careful with the punctuation here - we have 3 arguments.
# The first is a big string with semicolons in it.
# (Strings separated by only whitespace, newlines included,
# are automatically joined together, in case you didn't know.)
# The last two are emptry strings.
connection = connect('DATABASE=<database name>;'
'HOSTNAME=<database ip>;' # 127.0.0.1 or localhost works if it's local
'PORT=<database port>;'
'PROTOCOL=TCPIP;'
'UID=<database username>;'
'PWD=<username password>;', '', '')
接下来你应该知道ibm_db
的命令实际上从未给你带来结果。相反,您需要重复调用命令中的fetch
方法之一来获取结果。我写了这个辅助函数来处理它。
def results(command):
from ibm_db import fetch_assoc
ret = []
result = fetch_assoc(command)
while result:
# This builds a list in memory. Theoretically, if there's a lot of rows,
# we could run out of memory. In practice, I've never had that happen.
# If it's ever a problem, you could use
# yield result
# Then this function would become a generator. You lose the ability to access
# results by index or slice them or whatever, but you retain
# the ability to iterate on them.
ret.append(result)
result = fetch_assoc(command)
return ret # Ditch this line if you choose to use a generator.
现在定义了辅助函数,您可以轻松地执行以下操作:使用以下内容获取数据库中所有表的信息:
from ibm_db import tables
t = results(tables(connection))
如果您想查看给定表格中的所有内容,您现在可以执行以下操作:
from ibm_db import exec_immediate
sql = 'LIST * FROM ' + t[170]['TABLE_NAME'] # Using our list of tables t from before...
rows = results(exec_immediate(connection, sql))
现在rows
包含数据库中第170个表的list
行,其中每行包含dict
列名:value。
希望这一切都有所帮助。
答案 1 :(得分:10)
ibm-db,Python和Django的官方DB2驱动程序在这里:
这是最近有关如何在Ubuntu Linux上安装所有内容的教程:
我应该提到Python有几个较旧的非官方DB2驱动程序。 ibm-db是你应该使用的那个。
答案 2 :(得分:5)
经过大量挖掘后,我发现了如何使用ibm_db与DB2建立连接。
首先,如果你使用高于3.2的python版本
pip install ibm_db == 2.0.8a
版本2.0.8(最新版本)将无法安装。
然后使用以下内容连接
. as $in | keys_unsorted | map ({"key": ., "size" : $in[.].size}) | sort_by(.size) | map(.key | {(.) : $in[.]}) | add
使用
列出表格import ibm_db_dbi as db
conn = db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username;PWD=password;", "", "")
并使用
执行SQLfor t in conn.tables():
print(t)
检查this link官方不太准确的文档
答案 3 :(得分:2)
您可以使用jaydeapi从python连接到db2 首先安装库运行pip install jaydeapi 下载db2jcc4.jar 然后你可以使用下面的代码连接: 通过传递hostname,portno,userid,密码数据库名称
import jaydebeapi
conn_src = jaydebeapi.connect(
'com.ibm.db2.jcc.DB2Driver',
['YourHostName:PortNo/DatabaseName','userid','password'],'C:/db2jcc4.jar'
)
cursor=conn_src.cursor()
sql = 'Select * from schemaname.TableName fetch first 100 rows only '
cursor.execute(sql)
print("fetchall:")
result = cursor.fetchall()
for r in result:
print(r)
答案 4 :(得分:1)
除了@ prof1990 response:
从2.0.9版(2018年8月16日)开始,同样使用Python 3,您也可以简单地使用:
pip install ibm_db
参考:
https://github.com/ibmdb/python-ibmdb#updated-ibm_db
连接示例here:
import ibm_db
ibm_db.connect("DATABASE=<dbname>;HOSTNAME=<host>;PORT=<60000>;PROTOCOL=TCPIP;UID=<username>;PWD=<password>;", "", "")
完整的API文档在这里:
答案 5 :(得分:0)
您可以使用ibm_db库来连接DB2。
query_str = "SELECT COUNT(*) FROM table_name"
conn = ibm_db.pconnect("dsn=write","usrname","secret")
query_stmt = ibm_db.prepare(conn, query_str)
ibm_db.execute(query_stmt)
答案 6 :(得分:0)
这是为了将来参考:
Python 2.5或更高版本,不包括Python 3.X。
pip install ibm_db
它对我来说只适用于Python 2.7;它没有3.X.此外,我必须使Python 2.7默认(而不是Python 3),以便安装可行(否则,将出现安装错误)。
import ibm_db
ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username; PWD=password;", "", "")
答案 7 :(得分:0)
IBM的Db2可用于各种平台。如果要连接到IBM i服务器(以前称为AS / 400,iSeries或System i)上的Db2,则ibm_db需要一个名为Db2 Connect的产品,该产品相当昂贵。大多数使用Python为我连接到Db2的人都使用ODBC(通常通过PyODBC)。
我不确定他们的z(大型机)服务器上使用Db2的情况,但是我认为这也需要Db2 Connect。
答案 8 :(得分:0)
版本:ibm-db 3.0.2-ibm-db==3.0.2
pip install ibm-db
发布时间:2020年6月17日
连接到本地或分类数据库:
import ibm_db
conn = ibm_db.connect("database","username","password")
连接到未列入目录的数据库:
import ibm_db
ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username;
PWD=password;", "", "")
答案 9 :(得分:0)
有一种方法可以使人仅使用Python请求库就可以连接到IBM db2。
观看以下视频,发现它非常有用:
https://youtu.be/PSNBDwgf9ts
您只需要请求库和db2凭据。为我工作。
答案 10 :(得分:0)
我在 2021 年的表现如何。 您需要什么:
ibm-db 版本并不重要,但此库仅适用于 Python 3.7(当前 Python 版本为 3.9)。
在您的机器上安装 Python 3.7.6(这是有效的版本)。
在您的 IDE 中创建一个新的 python 文件。
让我们创建一个虚拟环境以确保我们将使用 Python 3.7
pip install pipenv
安装后
pipenv install --python 3.7
激活虚拟环境
pipenv shell
您可以使用 pip list
来验证您是否在新的虚拟环境中 - 如果列表仅显示 3 或 4 个库,那是因为您在
现在您可以下载 Ibm_db
pip install ibm-db
您可以将此添加到您的代码中以确认您使用的是什么版本
from platform import python_version
print(python_version())
现在访问 DB2
import ibm_db_dbi as db
# Connect to DB2B1 (keep Protocol as TCPIP)
conn = db.connect("DATABASE=DBNAME;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=Your User;PWD=Your Password;", "", "")
检查所有可用的表
for t in conn.tables():
print(t)
您的 SQL 代码:
sql_for_df = """SELECT *
FROM TABLE
WHERE ..."""
可视化为 DataFrame
首先安装 pandas,因为它不会出现在您的虚拟环境中
pip install pandas
之后导入到您的代码中并进行操作
import pandas as pd
df = pd.read_sql(sql_for_df, conn)
df.head()
要退出虚拟环境,只需在终端中写入 exit
。
如果要删除终端中的虚拟环境写入 pipenv --rm
到目前为止我能学到的就这么多。 希望对大家有帮助。
答案 11 :(得分:0)
# Install : ibm_db package
# Command : pip install ibm_db
import ibm_db
import sys
def get_connection():
db_name = ""
db_host_name = ""
db_port = ""
db_protocol = ""
db_username = ""
db_password = ""
try:
conn = ibm_db.connect(
f"DATABASE = {db_name}; HOSTNAME = {db_host_name}; PORT = {db_port}; PROTOCOL = {db_protocol}; "
f"UID = {db_username}; PWD = {db_password};", "", "")
return conn
except:
print("no connection:", ibm_db.conn_errormsg())
sys.exit(1)
get_connection()