LoginSignup
3
0

More than 3 years have passed since last update.

[cx_Oracle入門](第8回) cx_Oracle8.0リリース

Last updated at Posted at 2020-06-27

2020/6/26(日本時間)にcx_Oracleが7.3から8.0にバージョンアップされました。
以下、8.0の新機能、変更点のおおまかな解説です。メジャーバージョンアップだけあって、大きな(と筆者が感じる)変更が含まれています。以下、番号はcx_Oracleのリリースノートに対応しています。

1. Python2のサポート終了

サポートするPythonのバージョンが3.5以降となりました。Python2で利用したい場合は7.3を使用する必要があります。

2. ODPI-Cのバージョン変更

cx_OracleはODPI-CというOSSのC言語のOracleアクセスドライバを用いて作成されています。バージョン8.0は、ODPI-C 4.0.1をベースにビルドされています。

3. 型マネジメントの変更

以下の通り、大幅に見直されています。

  • 型の定数の体系が以下の通りに整理されました。
  • 7.3では一部のOralce Databaseデータ型に対し、対応するcx_Oracleデータ型定数が存在しませんでした。8.0で不足していたデータ型への対応として、以下を追加しています。
    • cx_Oracle.DB_TYPE_BINARY_FLOAT
    • cx_Oracle.DB_TYPE_INTERVAL_YM
    • cx_Oracle.DB_TYPE_TIMESTAMP_LTZ
    • cx_Oracle.DB_TYPE_TIMESTAMP_TZ
  • Variableオブジェクトのtype属性に対する変更
    • Oracle Databaseのオブジェクト型にバインドされていない場合、NoneではなくDatabase Typeを使用するように変更
    • LOBに対応
    • Oracle Databaseのオブジェクト型の属性を取得可能に
  • Object Typeオブジェクトにelement_type属性を追加
  • 同一セッションないしコネクションプール使用時において、Object Typeオブジェクトの名前やスキーマの比較が可能に
  • すべての変数が同一クラスのインスタンスとなった
  • 変数の文字列表現に、値に加えて型が追加

4. cx_Oracle.init_oracle_client()の追加

Oracle Clientライブラリの初期化を行う関数cx_Oracle.init_oracle_client()が追加されました。

5. デフォルトエンコーディングの変更

7.3ではNoneでしたが、8.0ではUTF-8になりました。NLS_LANG環境変数のキャラクタのセットの指定は無視されます。

6. Soda Documentクラスへのメソッド追加

SodaCollectionオブジェクトにsave(), saveAndGet(), truncate()メソッドが追加されました。これらの機能を利用するためには、Oracle Client 20以降が必要です。

7. SodaOperation.fetchArraySize()の追加

SODAドキュメントのフェッチ件数を設定するSodaOperation.fetchArraySize()が追加されました。この機能を利用するためには、Oracle Client 19.5以降が必要です。

8. Cursor.prefetchrowsの追加

結果セットのプリフェッチを行うCursor.prefetchrowsが追加されました。

9. Connection.versionの初回実行に伴うラウンドトリップの回避

データベースのバージョン番号を取得するConnection.versionの初回実行に伴うラウンドトリップを回避するために、新しいモードの追加行っています。この機能を利用するためには、Oracle Client 20以降が必要です。

10. PFILE対応

PFILEを使用したデータベースの起動に対応しました。7.3まではSPFILEのみの対応でした。

11. Cursor.getbatcherrors()のバッファオーバーフローの修正

オフセットが65536を超えた場合、Cursor.getbatcherrors()でバッファオーバーフローが発生する問題を修正しました。

12. Cursor.lastrowidの挙動の変更

INSERT ALL文を実行した後にCursor.lastrowidを実行した場合にエラーが発生しないように変更されました。

13. Alex Henrie氏のpull requestの受け入れ

主にコードの改善(冗長なコーディングの改善等)に関する6つのpull requestを取り込んでいます。

14. boolean変数にバインドされたPythonオブジェクトの挙動

boolean変数にバインドされたPythonオブジェクトは、Pythonのif文の中でTrueかFalseとみなされるかに従ってTrue/Falseに変換されるようになりました。従来はTrueのみTrueに変換され、それ以外はFalseに変換されていました。

15. 本体コード以外の改善

ドキュメント、サンプル、テストを改善しています。

変更履歴

  • 2020/12/12 : 誤字修正
3
0
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
3
0