Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

[備忘] Dr.SumにPythonで接続してみる。

Last updated at Posted at 2021-11-15

Dr.Sumとは

Dr.Sumは、経営や営業などの業務の現場で、企業内の基幹データベースの情報を高速に集計できるBIツールです。
詳しくはマニュアルを参照

Dr.Sumへの接続

Dr.Sumへの接続は下記の4つが提供されている。

  • JavaAPI
  • .NETAPI
  • JDBC
  • ODBC

今回はPythonから接続するため、下記のPythonライブラリを使用し、JDBCODBCで接続してみます。

JDBC

Dr.SumへのJDBC接続では JayDeBeApi というライブラリを使用します。
このライブラリを使ことでPythonでJDBCドライバが使えるようになります。

JDBCドライバの確認

Dr.SumのDevKitをインストールするとインストールディレクトリ配下にJDBCドライバが格納されます。

<Dr.Sumインストールフォルダ>\DevKit\java\jdbc\dwodsjd4.jar

image.png

JayDeBeApi のインストール
pip install JayDeBeApi
PythonからJDBC接続

本記事では後々扱いやすいようにDataFrameでデータを取得しています。

jdbc_sample.py
# ライブラリのインポート
import jaydebeapi as jdba
import pandas as pd

# 接続
conn = jdba.connect("jp.co.dw_sapporo.JDBC.JDBCDriver",
                          "jdbc:dwods:<host>:<6001>:<DB名>",
                          [<userID>, <Password>],
                          "C:\DrSum56\DevKit\java\jdbc\dwodsjd4.jar")
curs = conn.cursor()

# SQLの実行
sql = "select * from <テーブル名>"
dataset = pd.read_sql_query(sql, conn)

ODBC

Dr.SumへのODBC接続では pyodbc というライブラリを使用します。
このライブラリを使ことでPythonでODBCドライバが使えるようになります。

ODBCドライバの確認

[Windowsスタートメニュー]-[Windows管理ツール]-[ODBCデータソース]-[システムDSN]をクリックしてください。
画像1.png
追加をクリックするとインストール済みのODBCドライバが確認できます。
下記のように接続したいバージョンのDr.SumのODBCドライバが表示されていればOKです。
image.png

pyodbc のインストール
pip install pyodbc
PythonからODBC接続

本記事では後々扱いやすいようにDataFrameでデータを取得しています。

odbc_sample.py
# ライブラリのインポート
import pyodbc
import pandas as pd

# 接続
conn = pyodbc.connect(DRIVER="Dr.Sum 5.6 ODBC Driver",
                    HOST=<host>, DATABASE=<DB名>,user=<userID>,
                    password=<Password>, port=6001
                    )
curs = conn.cursor()
# SQLの実行
sql = "select * from <テーブル名>"
dataset = pd.read_sql_query(sql, conn)

データのインポート

import_sample.py
def dsImport(df):
    try:
        cnxn = pyodbc.connect('DSN={DSN}; UID={ID}; PWD={PW}'.format(DSN=DSN,ID=ID,PW=PW))
        cursor = cnxn.cursor()
        logging.info("Connected to the database.")
        logging.info("The import process has started.")
        columns = df.columns.values
        for index, row in df.iterrows():
            column = ','.join(str(s) for s in columns)
            value = '","'.join(str(s) for s in row.tolist())
            query = 'INSERT INTO {tbl} ( {col} ) VALUES( "{val}" );'.format(tbl=TBL,col=column,val=value)
            print(query)
            r = cursor.execute(query)
    except:
        cnxn.rollback()
        logging.error("Roll back because an error occurred during data import.")
    else:
        cnxn.commit()
        logging.info("Data import is complete.")
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?