Python Db2に接続する方法はありますか?
ドキュメントを見つけることは困難であり、一度それを見つけると、それはかなりひどいです。過去3時間に私が見つけたものは次のとおりです。
次のように、pip
を使用してibm_db
をインストールする必要があります。
pip install ibm_db
接続オブジェクトを作成する必要があります。 ドキュメントはこちらです
ここに私が書いたものがあります:
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
メソッドの1つを繰り返し呼び出して、結果を取得する必要があります。それに対処するために、このヘルパー関数を作成しました。
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
が含まれています。
これがすべて役立つことを願っています。
ibm-db、PythonおよびDjangoの公式DB2ドライバーは次のとおりです。
Ubuntu Linuxにすべてをインストールする方法に関する最近のチュートリアルは次のとおりです。
Python用の古い非公式のDB2ドライバーがいくつかあったことを言及する必要があります。 ibm-dbを使用する必要があります。
掘り下げた後、ibm_dbを使用してDB2に接続する方法を発見しました。
まず、pythonバージョン3.2以降を使用する場合
pip install ibm_db == 2.0.8a
バージョン2.0.8(最新)はインストールに失敗します。
次に、以下を使用して接続します
import ibm_db_dbi as db
conn = db.connect("DATABASE=name;HOSTNAME=Host;PORT=60000;PROTOCOL=TCPIP;UID=username;PWD=password;", "", "")
でテーブルをリスト
for t in conn.tables():
print(t)
sQLを実行します
cursor = conn.cursor()
cursor.execute("SELECT * FROM Schema.Table")
for r in cursor.fetchall():
print(r)
チェック このリンク それほど正確でない公式のドキュメント
pythonを使用してdb2に接続できます。最初にpipを実行するライブラリをインストールします。jaydeapiをダウンロードします。db2jcc4.jarをダウンロードします。
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)
@ 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ドキュメントはこちら:
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)
これは将来の参照用です。
公式インストールドキュメント say:
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;", "", "")
IBMのDb2はさまざまなプラットフォームで利用できます。 IBM iサーバー(以前のAS/400、iSeries、またはSystem iとして知られている)上にあるDb2に接続しようとしている場合、ibm_dbには という製品が必要です。 Db2 Connect 。これはかなり高価です。 Pythonを使用してDb2 for iに接続するほとんどの人は、ODBC(通常は PyODBC を使用)を使用します。
Z(メインフレーム)サーバーでのDb2の状況については完全にはわかりませんが、Db2 Connectも必要だと思います。