LoginSignup
4
4

More than 3 years have passed since last update.

IBMi上のDBをJayDeBeApi使ってpython+JDBCでつついてみる

Posted at

IBM i上のデータをPythonで取り出せないか

ひょんなことから、IBM i (AS400とも呼ばれたOSです) のデータを取り出す必要に迫られました。

やりたいこと

IBM i上のデータを取り出して、LinuxとかWindowsで使いたい
システム内のデータを使って、機械学習だったり分析だったりをしたいと思うことがあります。
単純にPythonを使うだけなら、IBM i上で処理することもできます。

が、今回はGPU使ってDLだったりMLしたいので、Linux上にデータを持ってくる必要があります。
そのために、JDBC+Pythonでデータを引っ張ってこようと思います。

もちろん、Javaを使ってデータを取ってきてもよいです。
今回はPythonの方が得意という理由でPythonからJDBCを使うことにしました。
(DLやMLはPythonで書くことが多いので、その処理にも入れやすかも)

JayDeBeApiを使ってみる

今回は、JDBCのAPIを叩くためのPythonライブラリとして、JayDeBeApi を使います。
https://github.com/baztian/jaydebeapi

結構いろんな種類のDBに対応しています。
DB2もありますね!

Supported databases

In theory every database with a suitable JDBC driver should work. It is confirmed to work with the following databases:

SQLite
Hypersonic SQL (HSQLDB)
IBM DB2
IBM DB2 for mainframes
Oracle
Teradata DB
Netezza
Mimer DB
Microsoft SQL Server
MySQL
PostgreSQL
many more...

準備

今回は、Python3.6で動かします。

各ソフトウェアのバージョンは以下の通り

  • Python == 3.6
  • JayDeBeApi == 1.1.1
  • JPype1 == 0.6.3

インストール

pipでインストールできます。

pip install JayDeBeApi

JPypeのバージョンが最新だと、実行時にエラーが発生したので、0.6.3で再インストールしました。

pip install JPype1==0.6.3 --force-reinstall

JDBCドライバーの準備

今回はIBM iに標準で用意されているJarファイルを利用します。
jt400.jar が下記のディレクトリに格納されているので、IBM iから利用するLinux環境にコピーします。

/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar

簡単なデータ取得

<hostname>, <user>, <password>はお使いの環境に合わせて設定してください。

import jaydebeapi

conn = jaydebeapi.connect("com.ibm.as400.access.AS400JDBCDriver", "jdbc:as400://<hostname>", ["<user>", "<password>"], "/home/IBMi/jt400.jar",)

cur = conn.cursor()
cur.execute("select * from TSLIB.WORKDAY")
cur.fetchall()

curs.close()
conn.close()

このPythonスクリプトを実行することで、IBM iからデータを取得できました。
executeのSQL文を変更することで、DBに対する操作も変えられます。

4
4
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
4