NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #935 most downloaded on PyPI
Python DB API 2.0 (PEP 249) client for Amazon Athena
Last release 5 days ago
29 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
184 releases · first in 2017
v3.37.0 is a minor release of the 3.x maintenance line. It backports the SQLAlchemy ARRAY support and fixes from master ( #893 ). The 3.x line keeps s
v3.37.0 is a minor release of the 3.x maintenance line. It backports the SQLAlchemy ARRAY support and fixes from master (#893). The 3.x line keeps supporting Python 3.10 and sqlalchemy>=1.0.0.
array<...> columns are AthenaArray with their element types, instead of String, and types.ARRAY maps to AthenaArray (#774).Numeric precision and scale, to prevent silent rounding.CREATE TABLE renders STRUCT column types, including STRUCT values inside MAP and ARRAY, as Hive STRUCT<name:type>. Athena rejected the previous ROW(...) output (#870, #855). Thanks to @mvanhorn for the fix and @aminghadersohi for the report. Integers inside ARRAY, MAP, and STRUCT column types render as INT. Code that compares compiled DDL strings must expect STRUCT<...> and INT.CAST to Double or DOUBLE_PRECISION renders DOUBLE instead of the 32-bit REAL (#826).None (#770).Full Changelog: v3.36.0...v3.37.0
One column per quarter.
Add _escape_trino, keep _escape_presto as a backward-compatible alias by @laughingman7743 in #747
Full Changelog: v3.35.4...v3.36.0
Fix escaper selection for DELETE and CTAS to prevent SQL injection (CVE-2026-65321) by @laughingman7743 in #745
Full Changelog: v3.35.3...v3.35.4
Bump setuptools from 78.1.1 to 83.0.0 by @dependabot [bot] in #741
Full Changelog: v3.35.2...v3.35.3
Bump soupsieve from 2.8 to 2.8.4 by @dependabot [bot] in #738
Full Changelog: v3.35.1...v3.35.2
Restore legacy keyword arguments on the private _execute() methods by @laughingman7743 in #735
Full Changelog: v3.35.0...v3.35.1
Centralize shared execute() kwargs into an ExecuteOptions dataclass by @laughingman7743 in #733
Full Changelog: v3.34.0...v3.35.0
Add filesystem API parity features to the built-in S3FileSystem by @laughingman7743 in #729
Full Changelog: v3.33.0...v3.34.0
Replace Makefile with just by @laughingman7743 in #725
Full Changelog: v3.32.0...v3.33.0
Add on_poll callback for real-time query monitoring ( #723 ) by @laughingman7743 in #724
Full Changelog: v3.31.1...v3.32.0
Bump pyarrow from 18.1.0 to 23.0.1 by @dependabot [bot] in #720
Full Changelog: v3.31.0...v3.31.1
Bump requests from 2.32.4 to 2.33.0 by @dependabot [bot] in #699
Full Changelog: v3.30.1...v3.31.0
Move _normalize_hive_syntax to DefaultTypeConverter and fix pass stubs by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/695
_normalize_hive_syntax to DefaultTypeConverter and cleaned up pass stubs.All versions from v3.17.0 through v3.30.0 (released 2025-08-09 to 2026-02-28) are affected by this performance regression. The last unaffected version is v3.16.0.
If you cannot upgrade to v3.30.1, explicitly specify the C engine to bypass the incorrect engine selection:
cursor = connection.cursor(PandasCursor, engine="c")
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.30.0...v3.30.1
Add documentation for AioS3FileSystem and S3Executor by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/686
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.29.3...v3.30.0
Add S3Executor strategy pattern for async S3 operations by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/684
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.29.2...v3.29.3
Fix release workflow and split CI test jobs for independent retries by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/682
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.29.1...v3.29.2
Add async SQLAlchemy dialects for native asyncio support by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/679
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.29.0...v3.29.1
Add native asyncio cursor support (Phase 1) by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/666
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.28.0...v3.29.0
Update documentation domain to pyathena.dev by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/663
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.27.2...v3.28.0
Rewrite CLAUDE.md for maintainability by @laughingman7743 in https://github.com/pyathena-dev/PyAthena/pull/660
Full Changelog: https://github.com/pyathena-dev/PyAthena/compare/v3.27.1...v3.27.2
Fix README logo not displaying on PyPI by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/659
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.27.0...v3.27.1
Fix retry_api_call to use getEffectiveLevel() instead of logger.level by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/651
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.26.0...v3.27.0
Return DOUBLE type for double columns in SQLAlchemy 2.0+ by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/648
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.25.0...v3.26.0
Pass WorkGroup parameter to GetTableMetadata and ListTableMetadata APIs by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/646
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.24.1...v3.25.0
Unify _to_date converter and add git workflow guidelines by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/641
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.24.0...v3.24.1
Fix docs deployment from tag triggers by using workflow_dispatch by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/633
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.23.0...v3.24.0
Fix docs version detection for master branch builds by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/631
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.22.0...v3.23.0
Fix: Nested struct parsing fails to preserve nested fields (Issue #627) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/628
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.21.1...v3.22.0
trailing slash check for s3_staging_dir by @CAinDE in https://github.com/laughingman7743/PyAthena/pull/626
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.21.0...v3.21.1
Drop Python 3.9 support after EOL by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/622
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.20.0...v3.21.0
docs: Implement version selector with sphinx-multiversion by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/613
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.19.0...v3.20.0
docs: Change Sphinx theme from Alabaster to Furo by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/606
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.18.0...v3.19.0
Introduce hatch-vcs for automatic version management by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/600
'NoneType' object has no attribute 'get' can happen on AWS retries by @chollinger93 in https://github.com/laughingman7743/PyAthena/pull/604Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.17.1...v3.18.0
Fix dynamic imports in SQLAlchemy dialect components by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/599
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.17.0...v3.17.1
Add Athena filter() function support to SQLAlchemy dialect by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/592
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.16.0...v3.17.0
feat: implement STRUCT type support for PyAthena SQLAlchemy dialect by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/587
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.15.0...v3.16.0
Add CLAUDE.md development guide for AI assistants by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/586
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.14.1...v3.15.0
Fix incompatible dtype conversions in dataframe. (fix #523) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/585
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.14.0...v3.14.1
Add the import_dbapi method to classes that inherit AthenaDialect to suppress SQLAlchemy WARNING messages. (fix #582) by @laughingman7743 in https://g
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.13.0...v3.14.0
Comment out some test cases because of the high cost of AWS for testing by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/571
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.12.2...v3.13.0
Fix type hints by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/570
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.12.1...v3.12.2
Fix F821 Undefined name List and Union by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/569
List and Union by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/569Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.12.0...v3.12.1
Support Athena parameterized queries when paramstyle is qmark (fix #545) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/557
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.11.0...v3.12.0
Drop support for Python 3.8 (fix #561) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/565
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.10.0...v3.11.0
Fix to pass kwarg in the call to the execute method in the executemany method by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.9.0...v3.10.0
Bump urllib3 from 1.26.18 to 1.26.19 in /requirements by @dependabot in https://github.com/laughingman7743/PyAthena/pull/549
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.8.3...v3.9.0
Bump jinja2 from 3.1.3 to 3.1.4 in /requirements by @dependabot in https://github.com/laughingman7743/PyAthena/pull/542
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.8.2...v3.8.3
⚠️ This version may cause EntityTooSmall errors with multipart uploads. This will be fixed in the next version. ⚠️
⚠️ This version may cause EntityTooSmall errors with multipart uploads. This will be fixed in the next version. ⚠️
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.8.1...v3.8.2
Support for appending to files larger than 5GB by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/541
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.8.0...v3.8.1
⚠️ This version is not able to append to files larger than 5GB. This will be improved in the next version. ⚠️
⚠️ This version is not able to append to files larger than 5GB. This will be improved in the next version. ⚠️
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.7.0...v3.8.0
Add support for UPDATE and MERGE operation in formatter by @Oskar-Bonde in https://github.com/laughingman7743/PyAthena/pull/536
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.6.0...v3.7.0
Update README by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/530
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.5.1...v3.6.0
Fix future warnings by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/524
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.5.0...v3.5.1
Fix deprecation warnings by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/522
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.4.0...v3.5.0
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.5.1...v3.4.1
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.5.1...v3.4.1
Fixed incorrect rendering of numeric type variants in SQLAlchemy's DDL (fix #515) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/p
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.3.0...v3.4.0
Migrate package manager from pdm to hatch by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/513
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.2.1...v3.3.0
Revert missing cursor default arguments. (fix #506) by @laughingman7743 in https://github.com/laughingman7743/PyAthena/pull/508
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.2.0...v3.2.1
Bump jinja2 from 3.1.2 to 3.1.3 by @dependabot in https://github.com/laughingman7743/PyAthena/pull/500
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.1.0...v3.2.0
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.1.0...v3.1.1
Full Changelog: https://github.com/laughingman7743/PyAthena/compare/v3.1.0...v3.1.1
Your coding agent can read these notes before it upgrades. Set up the MCP server →