4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CP4DのWatson Studio NotebookからJayDeBeApiでDb2 for iに接続

Posted at

CP4DのでWatson Studio NotebookからJayDeBeApiでDb2 for iに接続する方法を説明します。

Db2 LUW版は既にWatson Studio Notebook環境にあるibm_dbライブラリでアクセスすることができます。ibm_dbライブラリでDb2 for iにアクセスするには、 IBM Db2 Connectのライセンスが必要で、これをどうにかWatson Studio Notebook環境に適用したかったのですが、いろいろやってみましたがうまくいきませんでした。

よってibm_dbライブラリは使用せず、別のライブラリでpythonからJDBCでDb2に接続できるライブラリJayDeBeApiを使用して接続する方法を今回は説明します。

なお、@tom_m_mさんのIBMi上のDBをJayDeBeApi使ってpython+JDBCでつついてみるを参考にさせていただきました。違いはドライバ入手先と、WatsonStudio Notebook環境用にドライバーファイル指定方法、db名指定、pandasでアクセスしている点あたりです。

0. 前準備

あらかじめCP4DのWatsonStudio上でNotebookを開いておいてください。
尚、完成版のnotebookは以下においていますので、
https://github.com/kyokonishito/notebooks/blob/main/cp4d_db2i_JayDeBeApi.ipynb
こちらから「URLから作成」でNotebookを作成も可能です。

1. Db2 for i JDBCドライバ jt400.jar の入手

こちらIBM i上にもあるらしいですが、オープンソース版があるそうですので、そちらを入手してみます。
IBM Toolbox for Javaの中にあるそうです。
で、このオーブンソース版がJTOpenとのことです。

ここからIBM Toolbox for Javaのzipファイルを入手し、JDBCドライバ jt400.jarを取り出します。
以下のコードはversion 11.1をダウンロードします。

Notebookのセルに以下をコピペし実行します:

vesion = "11.1"

zip_file = "jtopen_{0}.zip".format(vesion.replace('.', '_'))

# ダウンロードURLの作成
download_url = "https://sourceforge.net/projects/jt400/files/JTOpen-full/{0}/{1}/download/".format( vesion, zip_file)
print(download_url)

# ダウンロード
!wget -nc --content-disposition {download_url}

#  jt400.jarのみcurrent dirに解凍
!unzip -p {zip_file}  lib/jt400.jar > jt400.jar

# 確認
!ls -la

出力サンプル:

https://sourceforge.net/projects/jt400/files/JTOpen-full/11.1/jtopen_11_1.zip/download/
--2023-01-16 06:26:35--  https://sourceforge.net/projects/jt400/files/JTOpen-full/11.1/jtopen_11_1.zip/download/
Resolving sourceforge.net (sourceforge.net)... 104.18.10.128, 104.18.11.128, 2606:4700::6812:a80, ...
Connecting to sourceforge.net (sourceforge.net)|104.18.10.128|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://sourceforge.net/projects/jt400/files/JTOpen-full/11.1/jtopen_11_1.zip/download [following]
--2023-01-16 06:26:35--  https://sourceforge.net/projects/jt400/files/JTOpen-full/11.1/jtopen_11_1.zip/download
Reusing existing connection to sourceforge.net:443.
HTTP request sent, awaiting response... 302 Found
Location: https://downloads.sourceforge.net/project/jt400/JTOpen-full/11.1/jtopen_11_1.zip?ts=gAAAAABjxO4cHljOYOfCcUdK4zCMX0clfDKwJKqGl6lK2ozEqJCsJkMktMG0lvLk3vakOiI6r1-XkNqTUdo8PbVVv1WDlZwvdw%3D%3D&use_mirror=versaweb&r= [following]
--2023-01-16 06:26:36--  https://downloads.sourceforge.net/project/jt400/JTOpen-full/11.1/jtopen_11_1.zip?ts=gAAAAABjxO4cHljOYOfCcUdK4zCMX0clfDKwJKqGl6lK2ozEqJCsJkMktMG0lvLk3vakOiI6r1-XkNqTUdo8PbVVv1WDlZwvdw%3D%3D&use_mirror=versaweb&r=
Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 204.68.111.105
Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|204.68.111.105|:443... connected.
HTTP request sent, awaiting response... 302 Found
total 40652
drwxr-x---. 3 1000690000 wscommon     4096 Jan 16 06:24 .
drwxrwx---. 1 wsuser     wsbuild      4096 Jan 16 06:08 ..
-rw-rw----. 1 1000690000 wscommon  5629275 Jan 16 06:26 jt400.jar
-rw-rw----. 1 1000690000 wscommon 35972805 Nov 24 07:23 jtopen_11_1.zip
drwxr-x---. 2 1000690000 wscommon     4096 Jan 16 02:55 .virtual_documents

jt400.jar が notebookの仮想マシン上にsave出来ました!

2. JayDeBeApiのインストール

pipでJayDeBeApiをインストールします。

Notebookにセルを追加し、以下をコピペし実行します:

!pip install JayDeBeApi

3. Db2 for iに接続

3.1 接続情報をセット

Notebookにセルを追加し、以下をコピペし、自分のDbの接続情報に上書きした上で実行します:

dbname = 'IBMIxxxx'
host='xxx.xx.xx.xxx'
port='xxx'
uid='xxxxxx'
pwd='xxxxxxxx'

3.2 Db2へ接続

Notebookにセルを追加し、以下をコピペし実行します:

import jaydebeapi

conn = jaydebeapi.connect("com.ibm.as400.access.AS400JDBCDriver",
                          "jdbc:as400://{0}/{1}".format(host, dbname), 
                          ["{0}".format(uid), "{0}".format(pwd)], 
                          "./jt400.jar",)

最後の引数でダウンロードしたドライバーファイルを指定しています。
特にエラーがなければ接続成功です!

4. テーブルの中身の確認

pandasでテーブルの中身を確認してみます。

Notebookにセルを追加し、以下をコピペし、自分のDbで実行可能なSQLに上書きした上で実行します:

import pandas as pd

# 以下を自分のDbで実行可能なSQLに上書き
sql = "select * from SAMPLE.TABLE_A fetch first 100 rows only" 

# queryの実行、結果の表示
df = pd.read_sql(sql, conn)
df

結果が表示されればOKです。

5. Db接続のCLOSE

Notebookにセルを追加し、以下をコピペし実行します:

conn.close()

以上です。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?