【Python】cx_OracleでOracle Databaseのデータをフェッチする

cx_Oracle

本投稿ではcx_Oracleを用いてOracle Database(ver 12.1.0.2.0)に存在するテーブルのデータをPython(ver 3.6.3)上で表示させる方法を紹介します。
cx_Oracleのインストール手順はこちらを参照してください。

cx_Oracleを用いたOracle Databaseのデータ抽出

-Pythonを起動する。

$ python

-cx_Oracleを呼び出す。

>>> import cx_Oracle

-データベースへの接続情報を記載する。
書式:関数名 = cx_Oracle.connect('ユーザー名','パスワード','ホスト名/DB名')
   関数名 = cx_Oracle.connect('ユーザー名','パスワード','ホスト名:ポート番号/DB名')

>>> conn=cx_Oracle.connect('system','password','orahost/orcl')

-SELECT文を発行する。

>>> cur=conn.cursor()
>>> sql="select table_name from user_tables"
>>> cur.execute(sql)

-SELECT文の実行結果をfetchする。
fetchするには以下を使用する。
fetchmany(n) 現在の行からn行分のデータを出力する。
fetchall() 現在の行から残りすべてのデータを出力する。
fetchone() 現在の行から 一行分のデータを出力する。

以下のサイトがわかりやすかったです。
PythonとDB: DBIのcursorを理解する

>>> rows=cur.fetchmany(5)
>>> for row in rows:
...□□□□print(row)
...[Enter]押下で出力結果が表示される

※「□」はインデントを表す。

-実行例

>>> import cx_Oracle
>>> conn=cx_Oracle.connect('system','password','orahost/orcl')
>>> cur=conn.cursor()
>>> sql="select table_name from user_tables"
>>> cur.execute(sql)
>>> rows=cur.fetchmany(5)
>>> for row in rows:
... print(row)
...[Enter]
('HELP',)
('SQLPLUS_PRODUCT_PROFILE',)
('DEF$_AQERROR',)
('DEF$_AQCALL',)
('LOGSTDBY$EDS_TABLES',)

↑SELECT文の結果が表示されることを確認する。

fetchの動作検証

以下のテーブルデータを用いてfetchの動作検証をおこなう。

>>> import cx_Oracle
>>> conn=cx_Oracle.connect('test','password','orahost:1521/pdb1')
>>> cur=conn.cursor()
>>> sql="select * from test"
>>> cur.execute(sql)
<cx_Oracle.Cursor on <cx_Oracle.Connection to test@orahost:1521/pdb1>>
>>> rows=cur.fetchmany(2)
>>> for row in rows:
...□□□□print(row)
...[Enter]
('001', 'SATO')
('002', 'SUZUKI')
>>> rows=cur.fetchone()
>>> for row in rows:
...□□□□print(row)
...[Enter]
003
YAMADA
>>> rows=cur.fetchall()
>>> for row in rows:
...□□□□print(row)
...[Enter]
('004', 'MUKAI')
('005', 'YOSHIDA')
('006', 'KIMURA')
('007', 'ABE')
('008', 'USUI')
('009', 'TOMITA')
('010', 'NISHIDA')

以下を期待していたので想定通り動作してくれました。

fetchmany(2)で「ID」が001、002のデータを取り出す。
fetchone()で「ID」が003のデータを取り出す。
fetchall()で残りすべて(「ID」が004~010)のデータを取り出す。

検証時のキャプチャを添付し、今回はここまでとします。

コメント

タイトルとURLをコピーしました