1.0.0 - 2025-09-01¶
Summary¶
Documentation update¶
This release comes with updated documentation. In particular, the user guide now guides the user through installation, configuration, and PyExasol’s most important features.
Websocket in connection¶
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}.
For many users relying on the previous default behavior for encrypted connections, simply upgrading to version
1.0.0is likely to lead to breaking changes with error messages like:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed.
Prior to the upgrade:
Please determine which encryption and security measures are appropriate for your organization by reading through the User Guide’s security page.
If needed, update your usage of
pyexasol.connect(...)&ExaConnectionto reflect your organization’s needs.
IMPORT & EXPORT¶
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.
✨Features¶
Added support for multi-version documentation
Added support for all standard nox tasks provided by
exasol-toolbox#179: Modified
ExaConnectionso that default is encryption with strict certification verification#190: Added nox task to run examples
#194: Modified
ExaSQLThreadto include PUBLIC KEY in IMPORT and EXPORT queries for Exasol DB version 8.32.0 and onwards#214: Added support to EXPORT and IMPORT from Exasol to Polars DataFrames
⚒️ Refactorings¶
Reformatted entire code base with
blackandisort#194: Refactored
ExaSQLThreadand its children to reduce duplication and added types
🔩 Internal¶
Relocked 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-revsfile to workspaceNote: please make sure to adjust your git config accordingly (if not done yet)
git config blame.ignoreRevsFile .git-blame-ignore-revs
#181: Modified integration tests to run also with
ssl.CERT_REQUIRED#187: Updated poetry to 2.1.2 & exasol-toolbox to
1.0.1Relocked dependencies to resolve CVE-2025-43859 for transitive dependence
h11Relocked dependencies for transitive dependencies to resolve CVE-2025-47287
tornadoand CVE-2025-47273 forsetuptoolsRelocked dependencies for transitive dependency to resolve CVE-2024-47081
requests#194: Adapted integration tests so that tests with
ssl.CERT_REQUIREDcan be deselected#200: Activated Sonar for CI & Relocked dependencies to resolve CVEs for transitive dependence
urllib3Removed non-ASCII symbols from templates for GitHub issues
#218: Upgrade to exasol-toolbox
1.8.0which allowspytestto go up to8.4.1
📚 Documentation¶
Added sphinx based documentation
Added example to highlight how sensitive information from exceptions should be handled
Harmonized spelling of PyExasol across documentation
#204: Fixed broken links and some typos
#224: Added “Exploring PyExasol’s Features” directory in documentation and moved related pages there
#226: Added “Getting Started” page & “Configuration” directory in documentation and moved related pages there
#228: Reorganized “HTTP Transport” page to be under “Importing and Exporting Data”
#230: Reorganized “Security” page (formerly “Encryption”)
#221: Added additional information about TLS
Bugfix¶
#183: Replaced terminate_export & terminate_import for ExaHttpThread with terminate
Dependency Updates¶
main¶
Updated dependency
orjson:3.10.6to3.11.2Updated dependency
packaging:24.1to25.0Updated dependency
pandas:2.2.2to2.3.1Added dependency
polars:1.32.2Removed dependency
pyopenssl:24.2.1Updated dependency
python-rapidjson:1.19to1.21Updated dependency
rsa:4.9to4.9.1
dev¶
Updated dependency
docutils:0.20.1to0.21.2Updated dependency
exasol-integration-test-docker-environment:3.1.0to4.2.0Added dependency
exasol-toolbox:1.9.0Updated dependency
pytest:8.3.2to8.4.1Added dependency
types-ujson:5.10.0.20250326