連載目次
検証環境
- Oracle Cloud利用
- Oracle Linux 7.7 (VM.Standard2.1)
- Python 3.6
- cx_Oracle 7.3
- Oracle Database 19.5 (ATP, 1OCPU)
- Oracle Instant Client 18.5
DB接続の基本
cx_Oracleに限った話ではありませんが、Oracle Databaseに接続するには接続対象DBのユーザー名、そのユーザーのパスワード、および接続先情報(TNS接続子、EZCONNECTのどちらでも構いません)が必要です。これらは事前に準備されている必要があります。cx_Oracleでは、connect()というメソッドの引数にこれらを指定することでDBに接続できます。なお、connection()というエイリアスも用意されており、こちらを使用しても構いません。
例えば、ユーザー名が「scott」、パスワードが「Tiger」、接続先情報が「db1」である場合、
connection = cx_Oracle.connect("scott", "Tiger", "db1")
と、1番目の引数(引数名user)にユーザー名を、2番目の引数にパスワード(引数名password)を、3番目の引数(引数名dsn)に接続先情報を指定することでDBに接続できます。接続先情報が「hostname1:1521/db1.oracle.com」のようなEZCONNECT形式であっても、
connection = cx_Oracle.connect("scott", "Tiger", "hostname1:1521/db1.oracle.com")
と、同様に指定するだけです。環境変数ORACLE_SID等を用いたローカル接続の場合は、dsn引数は不要です。
このメソッドはConnectionオブジェクトを返します。以降、取得したConnectionオブジェクト(上記例だと変数connection)に対してSQL発行などの操作を実施していきます。
DB切断の基本
Connectionオブジェクトのclose()メソッドをコールします。
connection.close()
以下、DB接続し、接続先DBのバージョン情報を表示(下から2行目)して切断するアプリケーションのサンプルです。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
connection = cx_Oracle.connect(USERID, PASSWORD, DESTINATION)
print(connection.version)
connection.close()
with構文を使用した、より安全な接続
オープンしたリソースをクローズするのはプログラミングの鉄則です。しかし、現実としてはクローズを結構忘れてしまいがちです。オープンしたリソースの確実なクローズのために、Pythonではwith構文が用意されています。そして、cx_Oracleはwith構文に対応しています。以下のようにコーディングすることで、接続の確実なクローズが可能となります。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
print(connection.version)
変更履歴
- 2020/6/7
- タイトルに回数を追加
- 「検証環境」のOracle Instant Clientのバージョン誤りを修正
- 2020/7/5 : 連載目次を追加