0
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?

PythonからDr.sumEA上のデータを読み込む

Last updated at Posted at 2025-06-27

はじめに

Dr.sum EA上のテーブルやビューにアクセスするのに、毎回EnterpriseManagerからCSVでダウンロードしていたのですが、さすがにしんどいので、Pythonから直接アクセスしたいと思っていました。

Python×Dr.sum EAについて

2つの方向があり、今回は「PythonからDr.sum EAを呼び出す方」について書きます。

Dr.sum EAからPythonを呼び出す

Dr.sum EAには Python連携機能(Python Develop Tool) というのがあり、Dr.sum EAサーバ上に配置したPythonスクリプトを、Dr.sum EA上で実行できるというものです。
EnterpriseManager経由で、ローカルPCからDr.sum EAサーバへスクリプトを移送したり、pip installなどライブラリをインストールできるようです。
詳しくはオンラインマニュアルや他の記事を参照ください。

Dr.sum EA V5.6 オンラインマニュアル | Python Develp Tool

PythonからDr.sum EAを呼び出す

この記事で紹介するのは、PythonからDr.sum EAを呼び出す方法のほうです。
具体的には、PostgreSQLやMySQLなどのリレーショナルDBと同じように、Dr.sum EA上のテーブルやビューを取得し、PandasやMatlotlibやScikit-learnなどで少し触ってみるというのを想定しています。

元々は、EnterpriseManagerからエクスポートしたり、Dr.sum EA Datalizerなどからドリルスルーや明細表で取得したデータを使っていたのですが、いまさらですがさすがに何やってんねん俺って思ったので、他のRDBと同じようにならんのかと思いやってみました。

PythonからDr.sum EA上のデータを参照する

Dr.sum EAはデータウェアハウスとして優秀な製品のひとつですが、一般的なリレーショナルDBのように振る舞わせて取り扱うこともできます。
そこで、リレーショナルDBからデータを取得する際に用いられる一般的な方法であるODBCドライバーやJDBCドライバーを使って、Pythonからデータを呼び出してみようと思います。
Dr.sum EAのODBCドライバーおよびJDBCドライバーは、Dr.sum EAをサーバにインストールするための「インストールメディア」の「Development Kit」に含まれています。

ODBCドライバー編

  1. スタートメニューからODBCデータソース(64bit)を開いて以下設定する
    ※Dr.sumのインストールメディアでEnterpriseManagerなどをインストールする際に、ODBCドライバーのインストールも選択できたはず
    image.png

  2. 「システムDNS」の「追加(D)」を選択して
    image.png

  3. Dr.sum 5.* ODBC Driverを選択。
    image.png

  4. 接続テストをしたければユーザ・パスワード・DB名を入力する。入力してもしなくてもどちらでもよい。入力しておけばPythonスクリプトにシークレットを記載せずに済む。特にユーザとパスワード。
    image.png

  5. 環境に先にpyodbcを入れておく

pip install pyodbc

あとは以下のスクリプトで実行。

接続情報をシステムDNSに記載している場合.py
import pyodbc

with pyodbc.connect('DSN=DRSUM_EA;') as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        results=cursor.fetchall()

results

もし毎回入れたい場合は以下。

接続情報を都度設定したい場合.py
import pyodbc

conn_str = (
    'DSN=DRSUM_EA;'
    'UID=your_userid;'
    'PWD=your_password;'
    'DATABASE=your_dbname;'
)

with pyodbc.connect(conn_str) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        results=cursor.fetchall()

results

もし、自分しか管理しないPythonスクリプトであれば、このまま直打ちでも最悪いいけど、うっかりこのままgitにあげると恥ずかしいし、なんかむずがゆい。
なので、シークレット情報を.envファイルに分けて記載し、python-dotenvを使って読み込んだほうがよい。

.env
DRSUM_UID=your_userid
DRSUM_PWD=your_password
ユーザ情報をenvファイルから読み込む.py
import os
from dotenv import load_dotenv
import pyodbc

load_dotenv()

user = os.getenv("DRSUM_UID")
password = os.getenv("DRSUM_PWD")

conn_str = (
    f'DSN=DRSUM_EA;'
    f'UID={user};'
    f'PWD={password};'
    f'DATABASE=your_dbname;'
)

with pyodbc.connect(conn_str) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        results=cursor.fetchall()

results

ただ、システムDSNにuserとpasswordを記憶させておくほうが間違いはない気はする。

JDBCドライバー編

同じく、JDBCドライバーも利用できます。

  1. Dr.sum EAのインストールメディアを使ってDevelopmentKitをインストールしたPCで、C:\DrSumXX\DevKit\java\jdbc\dwodsjd4.jarがあることを確認する(なければインストールメディアからDevelopmentKitを入れる)
  2. JDBCドライバーを動かすために、そのPCにJavaが入っていることを確認する(なければ入れる。AdoptiumとかMicrosoft Build of OpenJDKとか)
  3. pip install JayDeBeAPIしておく
  4. 以下スクリプトを実行する。your_serverには接続先Dr.sum EAのホスト名かIDアドレスなどを入れて、your_dbnameにはDBNAMEを入れる。
JDBCドライバーを利用する場合.py
# %%
from contextlib import closing
import jaydebeapi

jdbc_driver = "jp.co.dw_sapporo.JDBC.JDBCDriver" # なんでsapporoなんだろう。
jdbc_url = "jdbc:dwods:your_server:6001:your_dbname" 
jar_path = ["C:/DrSum56/DevKit/java/jdbc/dwodsjd4.jar"]
user = "your_userid"
password = "your_password"

with closing(
    jaydebeapi.connect(jdbc_driver, jdbc_url, [user, password], jar_path)
) as conn:
    with closing(conn.cursor()) as cursor:
        cursor.execute("SELECT * FROM your_table")
        results = cursor.fetchall()

results

userとpasswordは、ODBCドライバー編で紹介した.envを使った方法のほうがなおよい。

参考

Pythonでなくとも、DBevberやA5:SQL Mk2などのフリーのSQL実行ツールでも、Dr.sumのデータにアクセスすることができます。超やさしい解説記事もあります。

読んでたら目が冴えて眠れなくなるTech Blog。

おわりに

わざわざPythonやEnterpriseManager使わなくとも、DBeaverかA5:SQL Mk2つかえばええやんと今更思い直してしまった。最近あまり使わなくなってワスレテタ。TECH BLOG読み漁りましょう。

本件については別に何の知見もないし、できて当然っちゃ当然なのですが、いままで何となく手を出していなかったし、そういえばできるよなと思い、自分のメモの代わりに記載しました。

個人的に、いまはデータカタログに興味があります。Dr.sumやMotionboardと連携されて、データを呼び出したら自動的にメタデータも一緒に払い出されて、LLMに読み込ませたらチョチョイーとコンテキスト理解してくれて…とか。

0
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
0
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?