6.0.0
6.0.0 - 2025-12-08
In this major release, sqlachemy-exasol has been migrated to the SQLAlchemy 2.0 API
and conventions. The focus of the migration was preserving existing feature parity.
Thus, new features added in the SQLAlchemy 2.0 API may not work as expected.
If such features are important to your team or if you experience other issues, please open
an issue. Note that this migration
is a breaking change and action will need to be taken by your team to make
your code compatible with sqlalchemy-exasol==6.0.0.
The migration to SQLAlchemy 2.0 allows users to benefit from continued security support, performance
improvements, modern typing support, and additional features. For details
on what SQLAlchemy 2.0 brings and which changes are needed in your projects, please
check out the following links:
Additionally, the ODBC-based dialects pyodbc and Turbodbc, which had been marked as
deprecated, were dropped. Please switch over to using the websocket dialect.
Connection strings should be altered to start with exa+websocket://.
Refactoring
- #621: Added
future=truetocreate_engineto use the 2.0 API - #623: Started switch to
sqlalchemy2.x (CI tested with 2.0.43)- All unit,
exasol, andregressiontests are working - Several tests from
sqlalchemyare failing, have been marked as skipped, and require investigation - Reinstated the ArgSignatureTest which ensures that all visit_XYZ() in
_sql.Compilersubclasses have**kw
- All unit,
- #626: Reinstated
sqlalchemytests:TrueDivTest.test_floordiv_integerandTrueDivTest.test_floordiv_integer_boundby providing an override inEXACompiler.visit_floordiv_binaryTrueDivTest.test_truediv_numericby providingExaDecimalto theEXADialect_pyodbc.colspecslist- a few tests from
ComponentReflectionTestasdefine_reflected_tablesis overridden based on what Exasol supports
- #631: Updated
EXADialect.has_tableto search for both tables and views, fixed passing of schema=None to dialect methods, and reinstatedsqlalchemytests:ReturningGuardsTestare used to indicate that the Exasol dialect, which does not natively support the RETURNING clause, is set up per the API specificationsComponentReflectionTest.test_not_existing_tableis used to indicate that specificEXADialectmethods (i.e.get_columns) check to see if the requested table/view exists and if not, they will now toss aNoSuchTableErrorexception
- #403: Dropped support for Turbodbc
- #404: Dropped support for pyodbc
- #654: Reinstated
sqlalchemytests after minor modifications to work for Exasol:ComponentReflectionTest.test_get_multi_columnsComponentReflectionTest.test_get_multi_foreign_keysComponentReflectionTest.test_get_multi_pk_constraintComponentReflectionTest.test_get_view_definition_does_not_exist
- #652: Reinstated
sqlalchemytests after minor modifications to work for Exasol:HasTableTest.test_has_table_cacheRowCountTest.test_non_rowcount_scenarios_no_raise
- #658: Updated to
exasol-toolbox3.0.0
Documentation
- #660: Updated User Guide
- Added Getting Started, Security, & Engine Configuration pages
- Cleaned up index and README.rst
- #663: Updated developer documentation
- #653: Updated User Guide for accessing Exasol SaaS instances.
Dependency Updates
main
- Updated dependency
pyexasol:1.2.1to1.3.0 - Removed dependency
pyodbc:5.3.0 - Updated dependency
sqlalchemy:1.4.54to2.0.44 - Removed dependency
turbodbc:4.5.4
dev
- Updated dependency
exasol-integration-test-docker-environment:4.3.0to4.4.1 - Updated dependency
exasol-toolbox:1.12.0to3.0.0 - Updated dependency
nox:2025.10.16to2025.11.12 - Removed dependency
pyodbc:5.3.0