簡體   English   中英

嘗試使用 python 訪問 IBM DB2 時出錯

[英]error trying to access IBM DB2 using python

我嘗試將我的 python 服務器與 IBM DB2 連接並收到此錯誤。 我在網上搜索,嘗試了很多東西,沒有任何東西可以解決它。 我在 IBM 文件夾中的任何地方都找不到 db2dsdriver.config。 對於上下文,我正在嘗試使用我在本地運行的 python flask 服務器訪問在線 IBM 數據庫

    File "server.py", line 8, in <module>
    conn = ibm_db.connect("BLUDB","MyDB2loginhere","psswd")
Exception: [IBM][CLI Driver] SQL1531N  The connection failed because the name specified with the DSN connection string keyword could not be found in either the db2dsdriver.cfg configuration file or the db2cli.ini configuration file.  Data s SQLCODE=-1531cified in the connection string: "BLUDB"

由評論回答。

默認情況下,當您安裝 python 模塊ibm_db時,它會提供一個來自 IBM 的小型 ODBC 驅動程序,稱為clidriver ,用於連接到本地或遠程 Db2 數據庫。 其他 ODBC 驅動程序可用,包括來自與 IBM 不同的其他供應商。 使用 IBM 提供的驅動程序(包括 clidriver),可能僅在訪問 Db2-for-Z/OS 或 Db2 for i series 時需要額外的許可證。 特別是對於 i 系列,使用 ODBC 驅動程序選項更便宜,該選項可通過名為IBM i access的 IBM 產品獲得(比購買 Db2-connect 的許可證以與 clidriver 一起使用更便宜)。

要連接到數據庫,您可以使用外部配置的 DSN(數據源名稱),或者在代碼中使用connection string

外部配置的 DSN 意味着您的代碼不會硬編碼任何連接細節,因此更容易在不同環境之間移動而無需更改代碼,因為配置都是外部數據。 您還可以將連接字符串安排在外部。

要配置外部 DSN,請使用本地工具或編輯db2dsdriver.cfg文件,這是一個小的 XML 文件,您可以手動或通過db2cli命令行創建和編輯。 本地工具可以是 MS-Windows 上的odbcad32或 Linux/Unix/MacOS 上的unixODBC IBM 在 Db2 知識中心發布的文檔提供了db2dsdriver.cfg的所有詳細信息。

要使用連接字符串,您需要目標數據庫主機名(服務器名稱或雲服務名稱)、端口號、數據庫名稱和用戶 ID+密碼(或 Db2-for-Z/ 的個人證書)操作系統)。 連接字符串的格式是分號分隔/終止的 X=Y 對集合,如下所示:

conn_string="Server=hostname_or_ip_address_of_the_Db2_server_Or_Cloud_Service;Port=50000;Database=BLUDB;UID=***;PWD=***;"

可以在該連接字符串中設置許多其他附加和可選設置,以控制連接的其他方面,或指定加密。 這些是連接屬性或連接屬性,都記錄在 Db2 知識中心。

使用連接字符串的 python 代碼如下所示:

conn = ibm_db.connect( conn_string, "", "" )

或者

conn = ibm_db.connect( conn_string, user, password)如果您從連接字符串中排除 UID 和 PWD 並將 then 作為第二個和第三個參數提供給 ibm_db.connect()。

我在 2021 年是如何做到的。你需要什么:

Python 3.7
PipEnv
Ibm-db
Ibm-db version is not important but this lib only works with Python 3.7 (current python version is 3.9).

在您的機器上安裝 Python 3.7.6(這是有效的版本)。

在您的 IDE 中創建一個新的 python 文件。

讓我們創建一個虛擬環境以確保我們將使用 Python 3.7

pip install pipenv

安裝后

pipenv install --python 3.7

激活虛擬環境

pipenv shell

您可以使用 pip 列表來驗證您是否在新的虛擬環境中 - 如果列表僅顯示 3 或 4 個庫,那是因為您是

現在您可以下載 Ibm_db

pip install ibm-db

您可以將此添加到您的代碼中以確認您使用的是什么版本

from platform import python_version
print(python_version())
Now accessing the 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;", "", "")
Checking all tables available

for t in conn.tables():
    print(t)
Your SQL code:

sql_for_df = """SELECT *
                FROM TABLE
                WHERE ..."""
Visualizing as DataFrame

首先安裝 pandas 因為它不會出現在您的虛擬環境中

pip install pandas

之后導入您的代碼並玩轉

import pandas as pd 

df = pd.read_sql(sql_for_df, conn) 
df.head()

要退出虛擬環境,只需在終端中寫入 exit。 如果要刪除虛擬環境,請在終端 pipenv --rm 中寫入

到目前為止,我能學到的幾乎就是這些了。 希望對大家有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM