web-dev-qa-db-ja.com

接続方法Python Db2

Python Db2に接続する方法はありますか?

26

ドキュメントを見つけることは困難であり、一度それを見つけると、それはかなりひどいです。過去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が含まれています。

これがすべて役立つことを願っています。

17
ArtOfWarfare

ibm-db、PythonおよびDjangoの公式DB2ドライバーは次のとおりです。

Ubuntu Linuxにすべてをインストールする方法に関する最近のチュートリアルは次のとおりです。

Python用の古い非公式のDB2ドライバーがいくつかあったことを言及する必要があります。 ibm-dbを使用する必要があります。

10
Leons

掘り下げた後、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)

チェック このリンク それほど正確でない公式のドキュメント

7
prof1990

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)
2
Rohit

@ 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ドキュメントはこちら:

https://github.com/ibmdb/python-ibmdb/wiki/APIs

2
matkap

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)
0
jatin

これは将来の参照用です。

公式インストールドキュメント 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;", "", "")
0
PALEN

IBMのDb2はさまざまなプラットフォームで利用できます。 IBM iサーバー(以前のAS/400、iSeries、またはSystem iとして知られている)上にあるDb2に接続しようとしている場合、ibm_dbには という製品が必要です。 Db2 Connect 。これはかなり高価です。 Pythonを使用してDb2 for iに接続するほとんどの人は、ODBC(通常は PyODBC を使用)を使用します。

Z(メインフレーム)サーバーでのDb2の状況については完全にはわかりませんが、Db2 Connectも必要だと思います。

0
John Y