eGenix mxODBC 3.3.0 GA

eGenix mxODBC 3.3.0 GA

eGenix is pleased to announce the immediate availability of eGenix mxODBC 3.3.0 - Python ODBC Database Interface, with support for Python 2.4 - 2.7 on all major platforms.


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 and Informix , Sybase ASE and Sybase Anywhere, MySQL, PostgreSQL, SAP MaxDB and many more:

>>>   mxODBC Product Page

The eGenix mxODBC - Python ODBC Database Interface product is a commercial extension to our eGenix mx Base Distribution:

>>>   mx Base Distribution Page


The 3.3.0 release of our mxODBC is a new release of our popular Python ODBC Interface for Windows, Linux, Mac OS X and FreeBSD.

New Features in 3.3

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.

More new Features

  • Custom errorhandlers are now also called very early during the connection process. This makes it possible to debug e.g. ODBC driver/manager setup problems from within Python, without having to resort to ODBC trace files.
  • Enhanced cursor.prepare() to allow querying cursor.description right after the prepare step and not only after calling a cursor.execute*() method.
  • Added iterator/generator support to .executemany(). The parameters list can now be an iterator/generator, if needed.
  • Added new connection.dbapi property to easily access module level symbols from the connection object.
  • Timestamp seconds fraction resolution is now determined from the scale of a datetime/timestamp SQL column, using the connection.timestampresolution as lower bound, when using SQL type binding. In Python type binding, the connection.timestampresolution determines the scale with which a variable is bound. This allows for greater flexibility when dealing with database backends that don't provide full nano-second second resolution, such as e.g. MS SQL Server.
  • mxODBC now accepts Unicode string values for date/time/datetime/timestamp column types in SQL type binding mode. Previous versions already did in Python type binding mode.
  • mxODBC now uses unicode(obj, encoding) semantics when binding Python objects to SQLWCHAR database parameters. Additionally, it ignores the encoding in case obj is a number, to avoid conversion errors.
  • Added new cursor.encoding and (read-only) cursor.converter attributes. Both inherit their default values from the connection the cursor was created on.
  • Added cursor.bindmethod which inherits from connection.bindmethod when creating the cursor. This allows adjusting the variable bind method on a per-cursor basis, rather than only on a per connection basis as in previous mxODBC versions. 
  • mxODBC is now built against unixODBC 2.3.2.
  • The SQL lookup object now supports ODBC 3.8 symbols and values, including driver specific symbols used by the MS SQL Server Native Client and IBM DB2 ODBC drivers.
  • Updated the DataDirect binding to version 7.1.2 of the DataDirect ODBC manager.

For the complete set of features, please have a look at the mxODBC product page.

Driver Compatibility Enhancements


  • 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.
  • Disabled a test for Oracle Instant Client which tries to set a pre-connect connection option for timeouts, since the ODBC driver segfaults with this option.

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 fo authentication on both Windows and Linux.
  • Added note about problems of the FreeTDS ODBC driver dealing with TIME and DATE columns to the documentation.

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.
  • Added note about a segfault problem with the Sybase ASE 15.7 ODBC driver which is caused by the driver corrupting the heap.


  • Added work-around for the IBM DB2 ODBC driver, which doesn't always pass back NULL correctly to mxODBC on 64-bit Unix systems.


  • 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.


  • 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.

The complete list of changes is available on the mxODBC changelog page.

The Future

  • Please note that this will be the last release of mxODBC for Python 2.4, 2.5 and 2.6. For the next release of mxODBC, we are focusing on making the code Python 2.7 and Python 3.x compatible, dropping support for earlier Python versions.
  • If you need long term support for these older Python versions, please contact the Sales Team. We can then arrange custom support contracts for you.

mxODBC 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.

For a complete overview of the available editions, please see the product page.


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.

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 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, stating your name (or the name of the company) and the number of eval licenses that you need.


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.

More Information

For more information on the Python products, licensing and download instructions, please write to

PS: If you want to meet with eGenix at PyCon 2014, please send an email and we can arrange a meeting.

Enjoy !

Marc-Andre Lemburg,

Published: 2014-04-08