NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3976 most downloaded on PyPI
Exasol python driver with extra features
Last release 19 days ago
15 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Most releases are documented
notes for 52 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
94 releases · first in 2018
This patch release improves WebSocket DB-API error handling by passing through the original PyExasol error messages and making the exception classific
This patch release improves WebSocket DB-API error handling by passing through the original PyExasol error messages and making the exception classification more specific. Connection and communication failures are reported as OperationalError, while cursor or connection lifecycle misuse is reported as InterfaceError. These exceptions remain compatible with existing handlers that catch their common Error base class.
It also tightens DSN parsing: the optional TLS fingerprint must appear before the optional port, using the form hostname[/fingerprint][:port] (for example, localhost/1234:8563). A DSN using the reversed form, such as localhost:8563/1234, is now rejected with a DSN parsing error instead of silently treating the fingerprint as part of the hostname.
One column per quarter.
This release fixes vulnerabilities by updating dependencies:
This update refactors CSV IMPORT and EXPORT query construction around dedicated
builders and a shared clause formatter. Parameters are validated before data transfer
starts, and the same construction path is now used by the callback and convenience
APIs. This reduces duplicated formatting logic, makes generated queries more
consistent, and provides clearer errors for invalid parameters while preserving the
existing public ImportQuery and ExportQuery classes.
This release fixes vulnerabilities by updating dependencies:
| Dependency | Vulnerability | Affected | Fixed in |
|---|---|---|---|
| gitpython | PYSEC-2026-3785 | 3.1.58 | 3.1.59 |
| gitpython | PYSEC-2026-3786 | 3.1.58 | 3.1.59 |
| gitpython | PYSEC-2026-3787 | 3.1.58 | 3.1.59 |
| gitpython | PYSEC-2026-3788 | 3.1.58 | 3.1.59 |
| tornado | GHSA-wwv5-g3v4-889x | 6.5.7 | 6.5.8 |
| tornado | GHSA-8423-8fgw-73vq | 6.5.7 | 6.5.8 |
| tornado | CVE-2026-82397 | 6.5.7 | 6.5.8 |
SqlQuery to TransportEndpoint for generating a common endpoint clauseImportBuilder and ExportBuilder with early Pydantic parameter validation. Moved Exasol API clause formatting into ClauseFormatter while preserving the existing public ImportQuery and ExportQuery classes.export_to_callback and import_from_callback to directly use ImportBuilder and ExportBuilderquery_or_table and IMPORT table type annotations to include tuple table identifiers (tuple[str, ...])2025.1.3-p.2ImportBuilder for native parquet importmaincryptography:50.0.0 to 50.0.1orjson:3.11.9 to 3.12.0polars:1.43.2 to 1.44.1pyarrow:25.0.0 to 25.0.1pydantic:2.13.5pytest-benchmark:5.2.3 to 5.3.0python-rapidjson:1.23 to 1.25devexasol-toolbox:10.4.0 to 10.5.0In this patch release, error reporting for import_from_callback and export_to_callback is improved by coordinating the completion of the callback, HTT
In this patch release, error reporting for import_from_callback and export_to_callback is improved by coordinating the completion of the callback, HTTP, and SQL threads.
import_from_* and export_to_* methods by coordinating completion of the HTTP and SQL import threads with a threading event--with-cert is specifiedThis release fixes the link to Pyexasol's changelog in pypi and fixes vulnerabilities by updating dependencies.
This release fixes the link to Pyexasol's changelog in pypi and fixes
vulnerabilities by updating dependencies.
This release fixes vulnerabilities by updating dependencies:
| Dependency | Vulnerability | Affected | Fixed in |
|---|---|---|---|
| cryptography | PYSEC-2026-3552 | 49.0.0 | 50.0.0 |
| gitpython | GHSA-3rp5-jjmw-4wv2 | 3.1.52 | 3.1.53 |
| gitpython | GHSA-fjr4-x663-mwxc | 3.1.52 | 3.1.54 |
| gitpython | GHSA-6p8h-3wgx-97gf | 3.1.52 | 3.1.54 |
| gitpython | GHSA-r9mr-m37c-5fr3 | 3.1.52 | 3.1.54 |
| gitpython | GHSA-94p4-4cq8-9g67 | 3.1.52 | 3.1.55 |
| gitpython | GHSA-3f7w-8rr8-f37f | 3.1.52 | 3.1.57 |
| gitpython | GHSA-p538-c434-8v24 | 3.1.52 | 3.1.56 |
exasol-toolbox 10.4.0maincryptography:49.0.0 to 50.0.0packaging:26.2 to 26.3polars:1.42.1 to 1.43.2devexasol-integration-test-docker-environment:6.4.1 to 6.5.1exasol-toolbox:10.3.0 to 10.4.0This release fixes vulnerabilities by updating dependencies:
This release fixes vulnerabilities by updating dependencies:
| Dependency | Vulnerability | Affected | Fixed in |
|---|---|---|---|
| setuptools | PYSEC-2026-3447 | 82.0.1 | 83.0.0 |
ExaConnection.execute_sql_script() for executing multi-statement SQL/ line.mainpolars:1.41.2 to 1.42.1pyarrow:24.0.0 to 25.0.0devexasol-integration-test-docker-environment:6.2.0 to 6.4.1exasol-toolbox:10.0.0 to 10.3.0In this patch release, the type hint for ExaConnection.set_autocommit was correctly restored to a bool .
In this patch release, the type hint for ExaConnection.set_autocommit was correctly restored to a bool.
ExaConnection.set_autocommitThis release fixes vulnerabilities by updating dependencies:
In this patch release, the down-pinning on packaging and websocket-client have been removed.
This release fixes vulnerabilities by updating dependencies:
| Dependency | Vulnerability | Affected | Fixed in |
|---|---|---|---|
| cryptography | GHSA-537c-gmf6-5ccf | 46.0.7 | 48.0.1 |
| gitpython | CVE-2026-42215 | 3.1.46 | 3.1.47 |
| gitpython | CVE-2026-42284 | 3.1.46 | 3.1.47 |
| gitpython | CVE-2026-44244 | 3.1.46 | 3.1.49 |
| gitpython | GHSA-mv93-w799-cj2w | 3.1.46 | 3.1.50 |
| idna | PYSEC-2026-215 | 3.11 | 3.15 |
| msgpack | GHSA-6v7p-g79w-8964 | 1.1.2 | 1.2.1 |
| pip | PYSEC-2026-196 | 26.0.1 | 26.1.2 |
| pip | CVE-2026-3219 | 26.0.1 | 26.1 |
| pip | CVE-2026-6357 | 26.0.1 | 26.1 |
| pyarrow | PYSEC-2026-113 | 23.0.0 | 23.0.1 |
| tornado | CVE-2026-49854 | 6.5.5 | 6.5.6 |
| tornado | CVE-2026-49853 | 6.5.5 | 6.5.6 |
| tornado | CVE-2026-49855 | 6.5.5 | 6.5.6 |
| tornado | GHSA-pw6j-qg29-8w7f | 6.5.5 | 6.5.7 |
| ujson | CVE-2026-44660 | 5.12.0 | 5.12.1 |
| ujson | CVE-2026-54911 | 5.12.0 | 5.13.0 |
| urllib3 | PYSEC-2026-142 | 2.6.3 | 2.7.0 |
| urllib3 | PYSEC-2026-142 | 2.6.3 | 2.7.0 |
| urllib3 | PYSEC-2026-141 | 2.6.3 | 2.7.0 |
poetry.lock and updated exasol-toolbox to 7.0.0poetry.lockexasol-toolbox version 8.0.0export plugin to pyproject.toml for exasol-toolbox usageexasol-toolbox version 8.1.1packaging which follows CalVer versioning and on websocket-clientmaincryptography:46.0.7 to 49.0.0orjson:3.11.7 to 3.11.9packaging:25.0 to 26.2polars:1.37.1 to 1.41.2pyarrow:23.0.0 to 24.0.0ujson:5.12.0 to 5.13.0websocket-client:1.8.0 to 1.9.0devexasol-integration-test-docker-environment:5.0.0 to 6.2.0exasol-toolbox:6.4.0 to 9.0.0pytest:9.0.3 to 9.1.1This allows users to re-lock their dependencies to use the non-vulnerable pytest version 9.0.3.
This release increases the allowed pytest range to >=7.0.0,<10". This allows users
to re-lock their dependencies to use the non-vulnerable pytest version 9.0.3.
This release fixes vulnerabilities by updating dependencies:
| Dependency | Vulnerability | Affected | Fixed in |
|---|---|---|---|
| cryptography | CVE-2026-39892 | 46.0.6 | 46.0.7 |
| pygments | CVE-2026-4539 | 2.19.2 | 2.20.0 |
| pytest | CVE-2025-71176 | 8.4.2 | 9.0.3 |
pytest range to >=7.0.0,<10" and relocked cryptography,maincryptography:46.0.6 to 46.0.7devexasol-toolbox:6.1.1 to 6.4.0pytest:8.4.2 to 9.0.3The poetry.lock was updated to handle vulnerable main & transitive dependencies. To ensure usage of secure packages, it is up to the user to similarly…
This update adds a method to create prepared statements. For more details, check out their example usage on the Examples page of the User Guide.
The poetry.lock was updated to handle vulnerable main & transitive dependencies. To ensure usage of secure packages, it is up to the user to similarly relock their dependencies.
ExaConnection.create_prepared_statementpoetry.lock to resolve vulnerable main dependencies:
cryptography:46.0.5 to 46.0.6 for CVE-2026-34073orjson:3.11.5 to 3.11.7 for CVE-2025-67221ujson:5.11.0 to 5.12.0 for CVE-2026-32874 and CVE-2026-32875poetry.lock to resolve vulnerable transitive dependency:
requests:2.32.5 to 2.33.0 for CVE-2026-25645tornado:6.5.4 to 6.5.5 for GHSA-78cv-mqj4-43f7 and CVE-2026-25645exasol-toolbox:6.0.0 to 6.1.1 to resolve vulnerable transitive dependency:
black:25.12.0 to 26.3.1 for CVE-2026-32274maincryptography:46.0.5 to 46.0.6orjson:3.11.5 to 3.11.7ujson:5.11.0 to 5.12.0devexasol-toolbox:6.0.0 to 6.1.1This update improves error reporting for import_from_callback and export_to_callback (used internally for the import_from_* and export_to_* variants )
This update improves error reporting for import_from_callback and export_to_callback (used internally for the import_from_* and export_to_* variants) by introducing a custom exception pattern. When data transfer fails, the library now captures and wraps exceptions from the main execution thread, the HTTP thread, and SQL thread. This ensures that concurrent failures are no longer obscured by whichever exception was caught first. Instead, the recorded exceptions are given with their tracebacks, making it easier to identify what went wrong.
exasol-toolbox 5.0.0exasol-toolbox 5.1.1 and re-locked poetry.lockpoetry.lock to resolve CVE-2026-26007, which affected cryptography versions <= 46.0.4exasol-toolbox 6.0.0export_to_callback and import_from_callback to ensure that the provided callback is Callable; if not, an exception is raised.export_to_callback so that all recorded exceptions are passed in ExaExportErrorimport_from_callback so that all recorded exceptions are passed in ExaImportErrorexport_to_callback and import_from_callbackmaincryptography:46.0.3 to 46.0.5orjson:3.11.4 to 3.11.5polars:1.34.0 to 1.37.1pyarrow:22.0.0 to 23.0.0devexasol-toolbox:4.0.0 to 6.0.0pandas-stubs:2.3.3.251219 to 2.3.3.260113drops support for Python 3.9, which reached its end-of-life in 2025-10.
This major release:
with_column_names in export_params behaves. Prior to this version,with_column_names was passed in the export_params, then it was interpreted asTrue regardless of what value was paired with it. In this version, this has beenwith_column_names in export_params from being a flag to being strictly booleanmainpyarrow:21.0.0 to 22.0.0python-rapidjson:1.22 to 1.23rsa:4.9.1devexasol-integration-test-docker-environment:4.3.0 to 5.0.0exasol-toolbox:1.12.0 to 4.0.0pandas-stubs:2.3.3.2512191.3.0 - 2025-11-17 Feature #281 : Added check to export_to_parquet to verify directory settings
279: Adapted documentation relating to export_to_parquet and HTTP transport methods:
export_to_parquet and HTTP transport methods:
export_to_parquet when the default is not overridden and the specified destination directory is not emptyThis release fixes the export_to_* functions to properly handle delimit in the generated EXPORT statement. Previously, this would have resulted in an
This release fixes the export_to_* functions to properly handle delimit in the
generated EXPORT statement. Previously, this would have resulted in an exception being
tossed due to improper formatting.
Additionally, the export_to_parquet has been modified to handle new line characters.
Previously, new line characters would have resulted in an exception being tossed. With
this change, a slight degradation in performance has been noted, but with the current
setup, this is currently unavoidable.
delimit in export_to_* functionsexport_to_parquet to handle new lines & preserve orderimport_from_parquet to have balanced bracketsmaincryptography:45.0.7 to 46.0.3orjson:3.11.2 to 3.11.4pandas:2.3.1 to 2.3.3polars:1.32.2 to 1.34.0pyarrow:20.0.0 to 21.0.0python-rapidjson:1.21 to 1.22ujson:5.10.0 to 5.11.0devexasol-integration-test-docker-environment:4.2.0 to 4.3.0exasol-toolbox:1.9.0 to 1.12.0pytest:8.4.1 to 8.4.2pytest-repeat:0.9.4types-ujson:5.10.0.20250326 to 5.10.0.20250822This release adds support to import from & export to local parquet file(s). For more details, check out their example usage on the Importing and Expor
This release adds support to import from & export to local parquet file(s). For more details, check out their example usage on the Importing and Exporting Data page of the User Guide.
ExaConnection.import_from_parquet which can import data from local parquet file(s)ExaConnection.export_to_parquet which can export data to local parquet file(s)mainnumpy:1.26.4pyarrow:20.0.0performancepytest-benchmark:5.1.0This hotfix fixes a bug with a missing dependency in the pyproject.toml.
This hotfix fixes a bug with a missing dependency in the pyproject.toml.
maincryptography:45.0.7This release adds support for the reserved word "nocertcheck" as fingerprint value, which disables the certificate check when establishing a connectio
This release adds support for the reserved word "nocertcheck" as fingerprint value, which disables the certificate check when establishing a connection.
Besides the release fixes a bug for ImportQuery and ExportQuery.
ImportQuery and ExportQuery to test more explicitly if None (instead of truthy assumptions).Users have historically been able to provide the server fingerprint for verification when using pyexasol.connect. In PyExasol 1.0.0, strict certificat
Users have historically been able to provide the server fingerprint for verification
when using pyexasol.connect. In PyExasol 1.0.0, strict certificate verification was
turned on as the default of pyexasol.connect. While this is the desired behavior, it
added the inconvenience to users using fingerprint verification to modify the
websocket_sslopt of their pyexasol.connect. With this bugfix, we disable strict
certificate verification by default when a fingerprint is provided to the dsn argument
of pyexasol.connect; thus, with PyExasol 1.0.1, users providing a fingerprint
should not need to alter their usage of pyexasol.connect.
dsn
argument for pyexasol.connect…EXPORT queries, leaving connections potentially vulnerable to security risks like man-in-the-middle attacks. Users needed to explicitly enable TLS cer…
This release comes with updated documentation. In particular, the user guide now guides the user through installation, configuration, and PyExasol's most important features.
From PyExasol version 1.0.0, the default behavior has been changed to use strict
certificate verification in ExaConnection and pyexasol.connect. This means that
the default websocket_sslopt=None will be mapped to
{"cert_reqs": ssl.CERT_REQUIRED}. The prior default behavior was to map such cases
to {"cert_reqs": ssl.CERT_NONE}.
1.0.0 is likely to lead to breaking changes with error
messages like: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed.Prior to the upgrade:
pyexasol.connect(...) & ExaConnection to
reflect your organization's needs.In Exasol DB versions prior to version 2025.1, the behavior of the database
was to have TLS certificate validation deactivated for IMPORT and EXPORT
queries, leaving connections potentially vulnerable to security risks like
man-in-the-middle attacks. Users needed to explicitly enable TLS certificate
validation using custom parameters or SQL syntax.
Starting with Exasol version 8.32.0, TLS Certificate Validation is available for IMPORT and EXPORT queries, ensuring secure data transfers
by validating certificates for external file connections like HTTPS and
FTPS. For more details, see
CHANGELOG: TLS Certificate Verification for Loader File Connections. This
certificate validation behavior is the default behavior starting with Exasol version
2025.1. For more details, see CHANGELOG: Default TLS Certificate Validation Enabled for Import/Export Queries.
Pyexasol uses a self-signed certificate for the encrypted http_transport
methods, which means that such queries would fail the enabled TLS certificate
validation (available from Exasol DB version 8.32.0), as the provided
certificate is not a globally trusted certificate. Thus, from version
1.0.0, PyExasol adapts the default behavior of its ExaSQLThread to include
clauses like PUBLIC KEY 'sha256//<sha256_base64_encoded_public_key>' in
these statements. Here's an example of an EXPORT query sent to an Exasol DB:
EXPORT my_table INTO CSV
AT '127.18.0.2:8364'
PUBLIC KEY 'sha256//YHistZoLhU9+FKoSEHHbNGtC/Ee4KT75DDBO+s5OG8o=' FILE '000.gz'
WITH COLUMN HEADERS
Additionally, the http_transport methods have been modified to more explicitly evaluate the
import_params and export_params dictionaries, which were passed into the IMPORT and EXPORT queries.
The previous behavior did not validate all the contents of a dictionary, but it would access needed ones with dict.get(key).
To make it more explicit what our http_transport methods support, we now pass the
dictionary to the http_transport.ImportQuery and http_transport.ExportQuery classes, so keys that we do not yet support would raise an exception.
exasol-toolboxExaConnection so that default is encryption with strict certification verificationExaSQLThread to include PUBLIC KEY in IMPORT and EXPORT queries for Exasol DB version 8.32.0 and onwardsblack and isortExaSQLThread and its children to reduce duplication and added typesRelocked dependencies
Due to changes in cryptography's Python support (!=3.9.0 and 3.9.1), we updated our support to Python ^3.9.2.
Added exasol-toolbox workflows and actions
Added missing plugin for multi-version documentation
Added support for publishing documentation to gh pages
Added .git-blame-ignore-revs file to workspace
Note: please make sure to adjust your git config accordingly (if not done yet)
git config blame.ignoreRevsFile .git-blame-ignore-revs
ssl.CERT_REQUIRED1.0.1h11tornado and CVE-2025-47273 for setuptoolsrequestsssl.CERT_REQUIRED can be deselectedurllib31.8.0 which allows pytest to go up to 8.4.1mainorjson:3.10.6 to 3.11.2packaging:24.1 to 25.0pandas:2.2.2 to 2.3.1polars:1.32.2pyopenssl:24.2.1python-rapidjson:1.19 to 1.21rsa:4.9 to 4.9.1devdocutils:0.20.1 to 0.21.2exasol-integration-test-docker-environment:3.1.0 to 4.2.0exasol-toolbox:1.9.0pytest:8.3.2 to 8.4.1types-ujson:5.10.0.20250326Relocked dependencies (Internal)
Added dbapi2 compliant driver interface exasol.driver.websocket ontop of pyexasol
Added dbapi2 compliant driver interface exasol.driver.websocket ontop of pyexasol
⚠️ Note:
This driver facade should only be used if one is certain that using the dbapi2 is the right solution for their scenario, taking all implications into account. For more details on why and who should avoid using dbapi2, please refer to the DBAPI2 compatibility section in our documentation.
Dropped support for python 3.7
Dropped support for Exasol 6.x
Dropped support for Exasol 7.0.x
Relocked dependencies (Internal)
Switched packaging and project workflow to poetry (internal)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Nothing published for this version
-
-
-
-
-
Nothing published for this version
-
Nothing published for this version
-
-
-
-
-
-
Nothing published for this version
-
Back to top Previous API Reference Next Unreleased
Back to top
Previous API Reference
Next Unreleased
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →