本投稿では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)のデータを取り出す。
検証時のキャプチャを添付し、今回はここまでとします。
コメント