Today we are pleased to announce the release of cx_Oracle 5.3, the extremely popular Python interface for Oracle Database. Binary and source bundles can be installed from PyPi, as normal.
cx_Oracle 5.3 works with Python version 2.7, and with versions 3.4 and higher. You can use cx_Oracle with Oracle 11.2, 12.1 and 12.2 client libraries, allowing connection to multiple Oracle Database versions. Oracle's standard client-server version interoperability allows connection to both older and newer databases. For example Oracle 11.2 client libraries can connect to Oracle Database 10.2 or later.
This release marks the move of the source code repository and home page to GitHub. User documentation remains on readthedocs. The cx_Oracle mail list also continues to operate, but you may find it easier to transition to GitHub for questions and issues.
The New cx_Oracle 5.3
Ever since Anthony Tuininga joined Oracle, he has been hard at work adding improvements to cx_Oracle. (He's also been laying the ground work for the next big release - more on that later in this post). I think you'll be impressed with cx_Oracle 5.3. At last year's Oracle OpenWorld, Anthony talked about some of the changes and got great positive feedback. Check out his presentation here.
This is a big update. While a few of the changes are specific to Oracle Database 12c features (see release notes), you will appreciate all the things that will make your applications better even if you have older databases. And you are upgrading to Oracle Database 12.2, right? Don't forget you can get immediate access to Oracle Database 12.2 using the Oracle Database Cloud.
Key New Features
Support for Python 3.6. Note Python versions earlier than 2.6 are no longer supported. (You can still get cx_Oracle 5.2 from PyPI, if you really need Python 2.6 support).
Support for Oracle client 12.2. Note Oracle clients earlier than 11.2 are no longer supported.
Direct binding to SQL objects. One great use case is binding Python objects to Oracle Spatial SDO objects. See InsertGeometry.py
PL/SQL records and collections can be bound. Interacting with PL/SQL stored logic has never been easier.
Support for scrollable cursors. Go back and forth through your query results. See ScrollableCursors.py
Support for Advanced Queuing. Use database notifications to build micro-service applications. See AdvancedQueuing.py
Fetch PL/SQL implicit results. Easily return query results from PL/SQL. See ImplicitResults.py
Transaction Guard support. Verify transaction status after unplanned server outages. See TransactionGuard.py
Support for Edition Based Redefinition. Easily switch applications to use updated PL/SQL logic. See Editioning.py
Support for Statement Caching. Reduce costs of frequently executed statements. Now available with all connections.
Support for setting application context during the creation of a connection. Make application metadata more accessible to the database, including in LOGON triggers. See AppContext.py
Other New Features
Continuous Query Notification use has been simplified. See DatabaseChangeNotification.py and QueryChangeNotification.py
Support for pickling/unpickling error objects
Support for binding native integers
Support setting the internal and external name for use in distributed transactions
Set the maximum lifetime of connections in a session pool
Larger row counts (greater than 2^32)
Increased default query array size to 100
Changes from cx_Oracle 5.2
In line with previous deprecations and announcements, the following items are no longer usable in cx_Oracle 5.3:
The variable attribute
maxlength
has been dropped. UsebufferSize
instead.The variable attribute
allocelems
has been dropped. UsenumElements
instead.The types
UNICODE
,FIXED_UNICODE
andLONG_UNICODE
have been dropped. UseNCHAR
,FIXED_NCHAR
andLONG_NCHAR
instead.Callbacks on OCI functions are no longer supported.
Future Deprecation Announcements
In a future cx_Oracle 6 release, the following items will be removed:
The
module
,action
andclientinfo
arguments to connection creation are deprecated and will be removed in cx_Oracle 6. Use the new application context instead.The cursor attribute
numbersAsStrings
is deprecated and will be removed in cx_Oracle 6. An output type handler should be used instead.
Things you could already do in cx_Oracle 5.2
All the new features in cx_Oracle 5.3 listed above are on top of a great history of database support. The high level features that you've already been using in the previous release are:
SQL and PL/SQL Execution
Extensive data type support
Fetching of large result sets
REF CURSORs
Binding PL/SQL Arrays
Large Objects: CLOBs and BLOBs
Transaction Management
Session Pooling
Database Resident Connection Pooling (DRCP)
Privileged Connections and Database startup/shutdown
External Authentication
Continuous Query Notification
Row Prefetching
Client Result Caching
End-to-end tracing
Oracle Database High Availability Features
A future cx_Oracle 6
I said you'd be impressed with cx_Oracle 5.3, but Anthony has already looked ahead to cx_Oracle 6, which aims to be even better. Over the past year, Anthony has been working hard on ODPI-C, an open source library of C code that simplifies and standardizes the use of common Oracle Call Interface (OCI) features, such as those used by cx_Oracle. ODPI-C was recently released on Github. As you can see from the cx_Oracle source code, the master branch of cx_Oracle code has been updated to use ODPI-C. If you want to test the current state of this future release, download a bundle from GitHub and build it. The release notes (so far) for user visible changes are here.
Summary
The move of cx_Oracle to under the umbrella of Oracle has given Anthony more time to focus on cx_Oracle and on making database access better for all developers.
Overall cx_Oracle is the most comprehensive and popular scripting language driver for Oracle Database. It takes advantage of the great features built into the Oracle client libraries and into Oracle Database. And, of course, Python cx_Oracle applications can take advantage of Oracle Net features such as network data encyption.
cx_Oracle 5.3 is a big release with support for some great Oracle Database features. Take a look.