LoginSignup
2
3

More than 3 years have passed since last update.

[cx_Oracle入門](第2回) Oracle Databaseへの接続と切断の基本

Last updated at Posted at 2020-06-05

連載目次

連載:cx_Oracle入門 目次

検証環境

  • 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行目)して切断するアプリケーションのサンプルです。

sample02a.py
#!/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構文に対応しています。以下のようにコーディングすることで、接続の確実なクローズが可能となります。

sample02b.py
#!/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 : 連載目次を追加
2
3
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
2
3