Releases: exasol/sqlalchemy-exasol
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
5.2.0
5.2.0 - 2025-11-04
This release drops the support for Python 3.9 as this Python version has reached its end-of-life in 2025-10. In consequence, the release also fixes security vulnerabilities by updating the dependencies.
With this release, in the Websocket-based dialect, it is possible for users to pass FINGERPRINT into
the connection URL to take advantage of an additional security feature in PyExasol version
1.x.
from sqlalchemy import create_engine
url = "exa+websocket://A_USER:[email protected]:1234/my_schema?FINGERPRINT=C70EB4DC0F62A3BF8FD7FF22D2EB2C489834958212AC12C867459AB86BE3A028"
engine = create_engine(url)
query = "select 42 from dual"
with engine.connect() as con:
result = con.execute(sql.text(query)).fetchall()Feature
- #612: Updated CI tests to run against Exasol DB versions 7.1.30, 8.34.0, and 2025.1.0. Dropped support for Python 3.9.
- #637: Added option to
exa-websocket(Websocket-based dialect) to passFINGERPRINTin the connection URL for additional security
Refactoring
- #610: Altered string input into
Connection.execute()to be handled properly withsql.text() - #614: Altered params input into
Connection.execute()to be handled properly withdict - #616: Altered usage of MetaData which was binding to a connection to instead bind in the needed object or function
- #617: Enacted warning for the deprecation of the
autoloadparameter and requirement ofbind - #618: Switched DML & DDL executions from
engine.connect()toengine.begin()usage - #637: Updated dependency declaration to
pyexasol
Internal
- #558: Updated to poetry 2.1.2 & relocked dependencies to resolve CVE-2025-27516
- #548: Replaced pytest-exasol-itde with pytest-backend
- Relocked dependencies to resolve CVE-2025-43859
- #564: Replaced nox test:unit with that from exasol-toolbox
- Reformatted files to meet project specifications
- #588: Updated to exasol-toolbox 1.6.0 and relocked dependencies to resolve CVE-2025-50182, CVE-2025-50181, & CVE-2024-47081
- #605: Removed non-ASCII unicode from templates & relocked dependencies to resolve CVE-2025-8869 (pip -> transitive dependency)
- #640: Re-locked dependencies to resolve CVE-2025-8869 for transitive dependency pip
Dependency Updates
main
- Updated dependency
packaging:24.2to25.0 - Updated dependency
pyexasol:0.27.0to1.2.1 - Updated dependency
pyodbc:5.2.0to5.3.0
dev
- Removed dependency
black:25.1.0 - Updated dependency
exasol-integration-test-docker-environment:3.4.0to4.3.0 - Updated dependency
exasol-toolbox:0.20.0to1.12.0 - Removed dependency
furo:2024.8.6 - Removed dependency
isort:5.13.2 - Removed dependency
mypy:1.15.0 - Updated dependency
nox:2025.2.9to2025.10.16 - Removed dependency
pre-commit:4.1.0 - Removed dependency
pylint:3.3.4 - Updated dependency
pyodbc:5.2.0to5.3.0 - Removed dependency
pytest-cov:6.0.0 - Added dependency
pytest-exasol-backend:1.2.2 - Removed dependency
pytest-exasol-itde:0.2.1 - Removed dependency
pytest-history:0.3.0 - Removed dependency
pyupgrade:3.19.1 - Removed dependency
sphinx:7.4.7 - Removed dependency
sphinx-copybutton:0.5.2 - Removed dependency
urlscan:1.0.6
5.1.0
5.1.0 — 2025-02-14
🗑️ Removed
- Dropped python 3.8 support
- If you still depend on python 3.8 use the 5.x version line
🧰 Internal
- Relocked dependencies
- Removed pyexasol dbapi2 api shim
(Now it is using the dbapi2 shim provided by the pyexasol project) - Remove testing against Exasol 7.0
📚 Documentation
- Added support for multiversion documentation
5.0.0
4.6.3
4.6.2
4.6.1
4.6.1 — 2023-11-06
🐞 Fixed
4.6.0
4.6.0 — 2023-07-18
✨ Features
- Websocket based dialect have been stabilized and is officially supported now
- 📘 Note: Inserting multiple empty row's, facilitating default settings currently isn't supported
🐞 Fixed
4.5.1
4.5.0
4.5.0 — 2023-05-24
-
Added Beta version of websocket based dialect
🚨 Attention:
This feature is currently in Beta, therefore it should not be used in production.
We also recommend to have a look into the known issues, before you start using it.If you encounter any problem, please create an issue.
With your feedback, we will be able stabilize this feature more quickly.