連載目次
はじめに
連載をサボっている間に新しいバージョンが2025年3月に新バージョンの3.0.0がリリースされ、4月3.1.0がリリースされました。今回は新バージョンで実装された主な機能についてThinモードを中心に解説します。修正された不具合を含む完全なリストはこちらです。
パイプライン処理の正式サポート
リリース2.4.0から試験的に導入されていましたが、3.0.0で正式機能となりました。この機能を利用すると、パイプラインに複数の処理(execute()やfetch系)を登録し、一度のデータベースのコールで複数の処理をまとめて非同期処理として投げることができます。データベースとのラウンドトリップの削減や非同期処理にすることでSQL処理中にほかの処理ができるようになるなど、全体的なパフォーマンスの向上に寄与します。もちろん更新系SQL文、SELECT文ともにそれぞれ複数の文を発行可能です。以下はマニュアルのままですがパイプライン処理のサンプルです。
import asyncio
import oracledb
async def main():
# Create a pipeline and define the operations
pipeline = oracledb.create_pipeline()
pipeline.add_fetchone("select temperature from weather")
pipeline.add_fetchall("select name from friends where active = true")
pipeline.add_fetchmany("select story from news order by popularity", num_rows=5)
connection = await oracle.connect_async(user="hr", password=userpwd,
dsn="localhost/orclpdb")
# Run the operations in the pipeline
result_1, result_2, result_3 = await connection.run_pipeline(pipeline)
# Print the database responses
print("Current temperature:", result_1.rows)
print("Active friends:", result_2.rows)
print("Top news stories:", result_3.rows)
await connection.close()
asyncio.run(main())
ただし、この機能は23aiに接続している場合のみ有効です。21c以前でも動きはしますが、パイプライン未使用時と同様SQLを1文ずつ投入します。
プラグイン機能
プラグイン機能により、python-oracledbに対し独自の機能拡張が行えるようになりました。標準で数個のプラグインが提供されています。次で説明する集中型構成プロバイダもプラグインとして実装されています。
集中型構成プロバイダ
集中型構成プロバイダ (Centralized Configuration Providers) はデータベースの接続資格情報やコネクションプール関係やキャッシュ関係などの情報を一元的にアプリケーションコードの外で管理し、アプリケーションからは一元的に管理された情報にアクセスすることでこれらの情報を取得、利用できるようになる機能です。アプリケーション内に認証周りのセンシティブな情報を記述する必要がなくなりセキュリティも向上します。また構成情報の使い回しができるようになるのでコーディングの負荷の削減も可能です。
情報を管理する先としてはOCIのObject StorageやMicrosoft AzureのAzure App Configurationといったクラウドサービスの他に、ローカルファイルも選択可能なので、オンプレミスのアプリケーションでも本機能の利用が可能です。ただしローカルファイルが選択できるのはThinモードのみです。
データフレーム対応
Apache Arrow PyCapsuleのインターフェースを利用して結果セットをデータフレームの形式で受け取ることができるようになりました。実際のデータフレームオブジェクトはOracleDataFrameという独自オブジェクトですが、当然ながら他のデータフレームに変換することが可能であり、PandasやPolarisのようなPandas互換のライブラリ、NumPy、PyTorch、Apache Parquetなどとの連携も可能になります。本機能はThickモードでも利用できますが、どちらのモードも3.1.0の段階ではプレリリース扱いの機能です。
その他
- Python 3.8のサポートの廃止 (3.1.0より。両モードとも)
- スクロール可能なカーソルのサポート (3.1.0より)
- Oracle Advanced Queuingのサポート強化
- Oracle Application Continuityのサポート強化
- Oracle Transaction Guardへの対応
- コネクションプールのキャッシング対応