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 workingSeveral tests from
sqlalchemyare failing, have been marked as skipped, and require investigationReinstated the ArgSignatureTest which ensures that all visit_XYZ() in
_sql.Compilersubclasses have**kw
#626: Reinstated
sqlalchemytests:TrueDivTest.test_floordiv_integerandTrueDivTest.test_floordiv_integer_boundby providing an override inEXACompiler.visit_floordiv_binaryTrueDivTest.test_truediv_numericby providingExaDecimalto theEXADialect_pyodbc.colspecslista 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.0Removed dependency
pyodbc:5.3.0Updated dependency
sqlalchemy:1.4.54to2.0.44Removed dependency
turbodbc:4.5.4
dev¶
Updated dependency
exasol-integration-test-docker-environment:4.3.0to4.4.1Updated dependency
exasol-toolbox:1.12.0to3.0.0Updated dependency
nox:2025.10.16to2025.11.12Removed dependency
pyodbc:5.3.0