Introduction
mxODBC™ provides an easy-to-use, high-performance, reliable and robust Python interface to ODBC compatible databases such as MS SQL Server, Oracle Database, IBM DB2, Informix and Netezza, SAP Sybase ASE and Sybase Anywhere, Teradata, MySQL, MariaDB, PostgreSQL, SAP MaxDB and many more:
The eGenix mxODBC - Python ODBC Database Interface product is a commercial extension to our open-source eGenix mx Base Distribution:
News
The 3.3.3 release of our mxODBC is a patch level release of our popular Python ODBC Interface for Windows, Linux, Mac OS X and FreeBSD. It includes these enhancements and fixes:
Driver Compatibility:
MS SQL Server
- Added a fix for the MS SQL Server Native Client error "[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]The data types varchar and text are incompatible in the equal to operator." when trying to bind a string of more than 256 bytes to a VARCHAR column while using cursor.executedirect(). cursor.execute() was unaffected by this. Thanks to Paul Perez for reporting this.
- Added a note to avoid using "execute " when calling stored procedures with MS SQL Server. This can result in '[Microsoft][SQL Native Client]Invalid Descriptor Index' errors. Simply dropping the "execute " will have the error go away.
- Added a work-around to address the FreeTDS driver error '[FreeTDS][SQL Server]The data types varbinary and image are incompatible in the equal to operator.' when trying to bind binary strings longer than 256 bytes to a VARBINARY column. This problem does not occur with the MS SQL Server Native Client.
- Reenabled returning cursor.rowcount for FreeTDS>= 0.91. In previous
versions, FreeTDS could return wrong data for .rowcount when using
SELECTs.This should make SQLAlchemy users happy again.
- Add work-around to have FreeTDS ODBC driver accept binary data in strings as input for VARBINARY columns. A side effect of this is that FreeTDS will now also accept binary data in VARCHAR columns.
SAP Sybase ASE
- Added work-arounds and improvements for Sybase ASE ODBC drivers to enable working with BINARY and VARBINARY columns.
- Added a work-around for a cursor.rowcount problem with Sybase ASE's ODBC driver on 64-bit platforms. It sometimes returns 4294967295 instead of -1.
- Added note about random segfault problems with the Sybase ASE 15.7 ODBC driver on Windows. Unfortunately, there's nothing much we can do about this, other than recommend using the Sybase ASE 15.5 ODBC driver version which does not have these stability problems.
Misc:
- Added improved documentation on the direct execution model available in mxODBC. This can help in more complex parameter binding situations and also provides performance boosts for a few databases, including e.g. MS SQL Server.
- Improved tests and added more data binding tests, esp. for SELECT queries with bound parameters.
- Fixed some minor issues with the package web installer related to Linux2 vs. Linux3, FreeBSD installations and an intermittent error related to hash seeds, which sometimes caused prebuilt archives to not install correctly.
Features
mxODBC 3.3 was released on 2014-04-08. These are the highlights of the new release:
mxODBC 3.3 Release Highlights
Stored Procedures
- mxODBC now has full support for input, output and input/output parameters in stored procedures and stored functions, allowing easy integration with existing databases systems.
User Customizable Row Objects
- Added support for user customizable row objects by adding cursor/connection .rowfactory and .row constructor attributes. When set, these are used to wrap the normal row tuples returned by the .fetch*() methods into dynamically created row objects.
- Added new RowFactory classes to support cursor.rowfactory and cursor.row. These allow dynamically creating row classes that provide sequence as well as mapping and attribute access to row fields - similar to what namedtuples implement, but specific to result sets.
Fast Cursor Types
- Switched to forward-only cursor types for all database backends, since this provides a much better performance for MS SQL Server and IBM DB2 drivers.
- Added a new .cursortype attribute to allow adjusting and inspecting the ODBC cursor type to be used for an mxODBC cursor object. Default is to use forward-only cursors, but mxODBC also support several other useful cursor types such as static cursors with full support for result set scrolling.
mxODBC 3.3 Driver Compatibility Enhancements
Oracle
- Added work-around for Oracle Instant Client to be able to use integer output parameters.
- Added a work-around for Oracle Instant Client to have it return output parameters based on the input placeholder Python parameter types. It would otherwise return all parameters as strings.
MS SQL Server
- mxODBC now defaults to 100ns connection.timestampresolution for MS SQL Server 2008 and later, and 1ms resolution for MS SQL server 2005 and earlier. This simplifies interfacing to SQL Server timestamp columns by preventing occasional precision errors.
- Tested mxODBC successfully with new MS SQL Server Native Client 11 for Linux. Unicode connection strings still don't work, but everything else does.
- Added documentation on how to use Kerberos with mxODBC and SQL Server for authentication on both Windows and Linux.
Sybase ASE
- Added work-around for the Sybase ASE ODBC driver, which doesn't always pass back NULL correctly to mxODBC on 64-bit Unix systems.
- Changed the variable type binding mode default for the Sybase ASE ODBC driver from Python type binding to SQL type binding, which resolves issues with e.g. the Unicode support for that driver.
IBM DB2
- Added work-around for the IBM DB2 ODBC driver, which doesn't always pass back NULL correctly to mxODBC on 64-bit Unix systems.
PostgreSQL
- Added work-around to force Python type binding for the PostgreSQL ODBC drivers. More recent versions of the driver report supporting SQL type binding, but they don't implement it.
- Added work-around to have PostgreSQL ODBC drivers properly work with binary data for BYTEA columns.
MySQL
- mxODBC now supports native Unicode with the recent MySQL ODBC drivers - provided you use the Unicode variants of the drivers.
- Changed the default binding mode for MySQL ODBC drivers to Python type binding. This works around a problem with date/time values when talking to MySQL 5.6 servers.
Editions
mxODBC is available in these two editions:
- The Professional Edition, which gives full access to all mxODBC features.
- The Product Development Edition, which allows including mxODBC in applications you develop.
Downloads
Please visit the eGenix mxODBC product page for downloads, instructions on installation and documentation of the packages.
Note that in order to use the eGenix mxODBC product, you first need to install our open-source eGenix mx Base Distribution.
You can also simply use:
pip install egenix-mxodbc
and then request 30-day evaluation licenses from our web-site.
Upgrading
Users are encouraged to upgrade to this latest mxODBC release to benefit from the new features and updated ODBC driver support.
We have taken special care not to introduce backwards incompatible changes, making the upgrade experience as smooth as possible.
Customers who have purchased mxODBC 3.3 licenses can continue to use their licenses with this patch level release.
For upgrade purchases, we will give out 20% discount coupons going from mxODBC 2.x to 3.3 and 50% coupons for upgrades from mxODBC 3.x to 3.3. Please contact the eGenix.com Sales Team with your existing license serials for details for an upgrade discount coupon.
If you want to try the new release before purchase, you can request 30-day evaluation licenses by visiting our web-site or writing to sales@egenix.com, stating your name (or the name of the company) and the number of eval licenses that you need.More Information
For more information on the eGenix.com Python products, licensing and download instructions, please write to sales@egenix.com.
Enjoy !
Marc-Andre Lemburg, eGenix.com