この記事は、JPOUG Advent Calendar 2022 8 日目の記事です。7 日目は gowatana さんの「Nutanix と Oracle Database」でした。
cx_Oracle → python-oracle
Oracle社製のPython向けのOracle Databaseアクセスドライバであるcx_Oracleは、2022年5月の改定にてpython-oracledbに刷新されました。本記事執筆時点(2022/12/8)でもcx_Oracleもまだ残ってはいますが、今後の改定は為されませんので、新規アプリケーションはもちろんのこと、既存アプリケーションもタイミングを見てpython-oracledbに変更してください。
python-oracledbで何が変わった?
python-oracledbもcx_Oracleと同じくPEP249(Python Database API Specification v2.0)に準拠しています。python-oracledbは実際にインストール、インポートするパッケージが「oracledb」になる点を除けば、コーディング上はcx_Oracleと基本的には変わりません。ですので、インポート部分を修正すればcx_Oracleのアプリケーションはほぼ動きます。
では何が変わったかということ、python-oracledbはThin Driverになりました。つまり、python-oracledbはOracle JDBC Thin Driverのように、Oracle Clientが不要になりました。cx_Oracleの場合はPythonアプリケーションと一緒にThick/InstantのOracle Clientを必要としましたが、python-oracledbではこれらクライアントを必要としませんので、作成したアプリケーションのセットアップがより簡単になり、アプリケーションがより配布しやすくなりました。ただし、python-oracledbはOracle Clientと共に使用することも可能です。Thin Mode(Oracle Client不使用)とThick Mode(Oracle Client使用)の両対応となります。Oracle Clientが必要になる(Thick Modeが必要になる)のは以下のケースです。
- Oracle Client 11gを使用する場合。12c以降のOracle ClientはThin ModeでもThick Modeでも利用が可能です
- cx_Oracleアプリケーションのバージョンアップの際、Oracle Clientを使用したままの形で移行したい場合。ただし、import文以外にもThick Modeを使用するためのコードの変更の必要があるので、このケースはあまりないとは思われます
- Oracle Clientが必要な機能(クライアント結果キャッシュなど)を利用する場合
今後の連載について
基本的にはcx_Oracle入門の焼き直しとなりますが、過去の連載で触れていない話題を加えて、より充実した内容にしたいと思います。