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.
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.
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
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
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. Use
The variable attribute
allocelems has been dropped. Use
LONG_UNICODE have been dropped. Use
Callbacks on OCI functions are no longer supported.
In a future cx_Oracle 6 release, the following items will be removed:
clientinfo 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.
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
Binding PL/SQL Arrays
Large Objects: CLOBs and BLOBs
Database Resident Connection Pooling (DRCP)
Privileged Connections and Database startup/shutdown
Continuous Query Notification
Client Result Caching
Oracle Database High Availability Features
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.
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.