機械学習

Pandasを利用してOracle DBのデータを取得してみた

Pythonでデータの取り込みや加工・集計、分析処理に利用できるライブラリの一つにPandasがあり、これを利用するとCSVファイルの読み込みに加え、データベースのデータの読み込みも行える。

今回は、Pandasを利用してOracle DBのデータ読み込みを行ってみたので、その手順とサンプルプログラムを共有する。

前提条件

下記記事の、A5M2を利用したOracle DBへの接続が行えること。

A5M2を利用して各DBに接続してみたA5M2(A5:SQL Mk-2)は、SQL文の入力支援やER図作成などの機能を備えていて、Oracle、MySQL、PostgreSQ...

Oracle DBへ接続する際の接続設定は以下の通りで、パスワードは「USER01」であること。
前提条件_1

また、USER_DATAテーブルに、以下のデータが作成されていること。
前提条件_2

さらに、下記記事のAnacondaをインストールしJupyter Notebookを利用できること。

Python開発用のAnacondaをインストールしJupyter Notebookを利用してみた今回は、Pythonを勉強してみたいと思い、Python開発環境を構築してみたので、その手順を共有する。 Python開発用として...

やってみたこと

  1. oracledbパッケージのインストール
  2. oracledbによるSELECT文の実行
  3. PandasによるSELECT文の実行
  4. cx-oracleパッケージのインストール

oracledbパッケージのインストール

PythonでOracle DBに接続するには、Anacondaでoracledbパッケージを使えるようにする必要がある。その手順は、以下の通り。

1) Windowsのスタートメニューから「Anaconda Prompt」を選択する。
oracledbパッケージのインストール_1

2) 以下のように、「conda list -f oracledb」コマンドを実行し、Anacondaにoracledbパッケージが含まれていないことを確認する。
oracledbパッケージのインストール_2

3)「pip install oracledb」コマンドを実行し、oracledbパッケージをインストールする。
oracledbパッケージのインストール_3

4)「conda list -f oracledb」コマンドを再度実行し、Anacondaにoracledbパッケージがインストールされたことを確認する。
oracledbパッケージのインストール_4



Androidロックを解除する裏ワザ「4uKey for Android」をご紹介Android端末では、以下の画像のような画面ロックパスワードを設定することができますが、このパスワードを忘れてしまうと、Android...

oracledbによるSELECT文の実行

oracledbを利用して、Oracle DBのデータを取得し表示するサンプルプログラムと実行結果は、以下の通り。

import oracledb

# OracleDBへの接続情報
oracle_user = "USER01"
oracle_passwd = "USER01"
oracle_hostname = "localhost"
oracle_sid = "xe"
oracle_dsn = oracle_hostname + "/" + oracle_sid

# OracleDBを初期化し、接続
oracledb.init_oracle_client()
connection = oracledb.connect(user=oracle_user
                , password=oracle_passwd, dsn=oracle_dsn)

# SELECT文を定義
# 複数行にまたがる文字列なので、トリプルクォートで囲う
sql_query = """  SELECT ID, NAME FROM USER_DATA 
  ORDER BY ID ASC """
print("*** 実行するSELECT文 ***")
print(sql_query)
print()

# SELECT文を実行し、結果を出力
cursor = connection.cursor()
cursor.execute(sql_query)
print("*** 実行結果 ***")
for id, name  in cursor:
    print("id =" + str(id) + ", name = " + name)
    
# OracleDBから切断
connection.close()
oracledbによるSELECT文の実行

PandasによるSELECT文の実行

Pandasを利用して、Oracle DBのデータを取得する際、以下のサンプルプログラムを実行すると、実行は行えるものの、SQLAlchemyのみがサポート対象である旨の警告が出てしまう。

import oracledb
import pandas as pd

# OracleDBへの接続情報
oracle_user = "USER01"
oracle_passwd = "USER01"
oracle_hostname = "localhost"
oracle_sid = "xe"
oracle_dsn = oracle_hostname + "/" + oracle_sid

# OracleDBを初期化し、接続
oracledb.init_oracle_client()
connection = oracledb.connect(user=oracle_user
                , password=oracle_passwd, dsn=oracle_dsn)

# SELECT文を定義
# 複数行にまたがる文字列なので、トリプルクォートで囲う
sql_query = """  SELECT * FROM USER_DATA 
  ORDER BY ID ASC """
print("*** 実行するSELECT文 ***")
print(sql_query)

# SELECT文を実行し、datasetに格納
dataset = pd.read_sql(sql_query, con=connection)

# OracleDBから切断
connection.close()
PandasによるSELECT文の実行_1
# 取得したデータを表示
dataset
PandasによるSELECT文の実行_2

上記ソースコードを、SQLAlchemyを利用するよう修正したサンプルプログラムと実行結果は、以下の通り。

import oracledb
import pandas as pd
from sqlalchemy.engine.url import URL
from sqlalchemy.engine.create import create_engine

# OracleDBへの接続情報
oracle_user = "USER01"
oracle_passwd = "USER01"
oracle_hostname = "localhost"
oracle_sid = "xe"

# OracleDBへの接続URLを生成
oracle_url = URL.create(
    drivername='oracle+cx_oracle',
    username=oracle_user,
    password=oracle_passwd,
    host=oracle_hostname,
    database=oracle_sid
)

# OracleDBを初期化
oracledb.init_oracle_client()

# SQLAlchemyを使ってOracleDBに接続する際のエンジンを定義
engine = create_engine(oracle_url)

# SELECT文を定義
# 複数行にまたがる文字列なので、トリプルクォートで囲う
sql_query = """  SELECT * FROM USER_DATA 
  ORDER BY ID ASC """
print("*** 実行するSELECT文 ***")
print(sql_query)

# SELECT文を実行し、dataset2に格納
dataset2 = pd.read_sql(sql_query, con=engine)
PandasによるSELECT文の実行_3
# 取得したデータを表示
dataset2
PandasによるSELECT文の実行_4

なお、上記実行結果になるには、cx-oracleパッケージのインストールする必要がある。cx-oracleパッケージをインストールしていない場合、以下のエラーメッセージが表示される。
PandasによるSELECT文の実行_5



「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

cx-oracleパッケージのインストール

SQLAlchemyを利用するには、cx-oracleパッケージのインストールが必要である。その手順は、以下の通り。

1) Anacondaプロンプトで「pip install cx_Oracle」コマンドを実行すると、Microsoft Visual C++ 14.0以降がインストールされていない場合、以下のエラーメッセージが表示される。
cx-oracleパッケージのインストール_1

2) 以下のサイトの記載内容に従って、Microsoft Visual C++ 14.0以降をインストールする。
「microsoft-visual-c-14-0-or-greater-is-required-」が出た場合の対処方法

3) Anacondaプロンプトで「pip install cx_Oracle」コマンドを再度実行すると、以下のように、cx-oracleパッケージがインストールされる。
cx-oracleパッケージのインストール_3

4)「conda list -f cx-oracle」コマンドを実行し、Anacondaにcx-oracleパッケージがインストールされたことを確認する。
cx-oracleパッケージのインストール_4

要点まとめ

  • PythonでOracle DBに接続するには、oracledbパッケージをインストールする必要がある。
  • Pandasのread_sqlメソッドを利用して、Oracle DBのデータを取得すると、実行は行えるものの、SQLAlchemyのみがサポート対象である旨の警告が出てしまう。
  • SQLAlchemyを利用してOracle DBに接続するには、cx-oracleパッケージをインストールする必要がある。