Skip to content

Releases

5.4.0 with wheels for Python 3.15

Choose a tag to compare

@mkleehammer mkleehammer released this 05 Nov 19:01
56ae3c8

Version 5.4.0 has been released with wheels for Python 3.11 - 3.15

Python support

Behavior changes

  • DECIMAL and NUMERIC values are now fetched using SQL_NUMERIC_STRUCT by default, so they are
    no longer affected by the locale's decimal separator. Set Connection.fetch_decimal_as_string = True
    to restore the previous text-based behavior. By @bkline in #1470
    • A driver that writes text in place of a SQL_NUMERIC_STRUCT (such as IBM i Access) is detected
      and read as text, by @rad-pat in #1514

New features

  • Support returning rows as dictionaries (Cursor.rows_as_dicts) by @bkline in #1487
  • Add support for SQLTablePrivileges (Cursor.tablePrivileges()) by @bkline in #1463
  • Expose the native ODBC handles (pyodbc.henv, Connection.hdbc, Cursor.hstmt) by @bkline in #1493
  • Make driver_completion configurable (connect(driver_completion=...)) by @bkline in #1488
  • Allow setting of connection string attributes (Connection.set_attr()) by @bkline in #1465
  • Support filtering DSN by scope (dataSources(scope=...)) by @bkline in #1461
  • Make initial ReadVarColumn buffer size configurable (Connection.readvar_initsize) by @bkline in #1490
  • Add flag for buggy SQLGetDiagRecW driver behavior (Connection.compat_diagrec_byte_length) by @bkline in #1464
  • Allow fetch of DB2 BLOB by @bkline in #1462
  • Fetch messages when DAE kicks in by @bkline in #1468

Bug fixes

Build and tests

  • Enable assertions for test builds and run SQLite tests in CI by @shramov in #1448
  • Prevent tests from failing with FreeTDS by @bkline in #1473
  • Remove test dependency coupling for testing UUID retrieval by @bkline in #1475
  • Replace custom macros with Py_STRINGIFY() by @bkline in #1485
  • Use ODBC Driver 18.6.2.1 for Windows tests now that the TVP crash is fixed by @mkleehammer in #1498
  • CI, test, and typing improvements throughout, and SQL Server 2025 in CI, by @keitherskine

Thanks

  • @keitherskine for once again keeping the wheel builds and CI current, including Python 3.15.
  • @bkline for the large majority of this release's features and fixes.

New Contributors

Full Changelog: 5.3.0...5.4.0

5.3.0 with wheels for Python 3.14

Choose a tag to compare

@mkleehammer mkleehammer released this 17 Oct 18:10

Version 5.3.0 has been released with wheels for versions 3.9 - 3.14

What's Changed

New Contributors

Full Changelog: 5.2.0...5.3.0

Release 5.2.0 with wheels for Python 3.13

Choose a tag to compare

@mkleehammer mkleehammer released this 16 Oct 01:44

Thanks to @keitherskine there are now wheels for 5.13. There are aiso a few bug fixes that were ready to go.

5.1.0 with Mac ARM (M1 & M2) binaries

Choose a tag to compare

@mkleehammer mkleehammer released this 05 Feb 17:00

Mac M1 & M2 binaries are available going forward.

GitHub added new Mac ARM action runners which is what we use to build each release.

Thanks to @keitherskine who made all this happen. Not only did he write the original release code for all of the other versions, he jumped on the new Mac runner as soon as it was available.

I'd also like to thank the many people working through the Mac binary confusion, testing and providing work arounds until this runner was available: @Carreau @ndmlny-qs @jordantshaw @gabalafou @v-chojas and many others on the Issue.

If you are a Mac user, please let us know how this works for you.

5.0.1 with fix for Azure tokens / binary attrs_before

Choose a tag to compare

@mkleehammer mkleehammer released this 13 Oct 17:10

This is a bug fix for 5.0.0 that restores the ability to pass bytes objects in the attrs_before parameter when connecting. This is often used for Azure with a token. Issue #1289

5.0.0 Release

Choose a tag to compare

@mkleehammer mkleehammer released this 10 Oct 15:06

This is the first 3.x only pyodbc release, supporting Python 3.8-3.12.

The API is backwards compatible, so previous Python 3 products using pyodbc should not need any changes.

Please note that macOS ARM / Apple Silicon binary builds have been problematic due inconsistencies in the way unixODBC libraries can be installed. Please see the issues and discussions.

5.0.0 beta2 - Help test macOS Apple Silicon binary wheels

Choose a tag to compare

@mkleehammer mkleehammer released this 28 Aug 15:56

We're retrying macOS Apple Silicon wheels, for those with M1, M2, etc. chips. If you have one of these, please give this release a try so we know before the final 5.0.0 release in a few days.

This means you would not use Rosetta. Just install normally using pip install pyodbc==5.0.0b2. Don't use --no-binary.

For those wondering, the inability to supply these wheels has not been due to any pyodbc code issues. We use Github Actions to build all the different versions and it still doesn't have complete support for macOS Apple Silicon CI runners. At this time, only Intel is supported. However, we can cross-compile and generate ARM wheels on Intel, but we can't test them. That's why we need your help!

5.0.0 Beta 1

5.0.0 Beta 1 Pre-release
Pre-release

Choose a tag to compare

@mkleehammer mkleehammer released this 27 Aug 07:32

This is a beta release for the upcoming 5.0 that drops Python 2 and adds Python 3.12

Source and wheels for 5.0.0b1 is available on PyPI.

This beta restores fast_executemany, so it should be feature complete. If there are no serious issues reported, it will be released as 5.0.0 this week (before Python 3.12 is officially released).

5.0.0 alpha 2

5.0.0 alpha 2 Pre-release
Pre-release

Choose a tag to compare

@mkleehammer mkleehammer released this 26 Aug 21:18

This is a test release for the upcoming 5.0 that drops Python 2 and supports Python 3.12

Source and wheels for 5.0.0a2 is available on PyPI

Note that fastexecmany is not available in this release, but will be ported to the next.

Please give it a try and join the discussion here.

Bug fix

Choose a tag to compare

@mkleehammer mkleehammer released this 14 Apr 14:03

Version 4.0.38 had a serious bug in Row.repr which could cause crashes (#1196 ). That version has been yanked from PyPI and replaced with this one.