Releases: exasol/pyexasol
1.2.0
1.2.0 - 2025-09-26
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.
Features
- #208: Added
ExaConnection.import_from_parquetwhich can import data from local parquet file(s) - #234: Added
ExaConnection.export_to_parquetwhich can export data to local parquet file(s) - #254: Added performance tests for http_transport export & import methods
Dependency Updates
main
- Removed dependency
numpy:1.26.4 - Added dependency
pyarrow:20.0.0
performance
- Added dependency
pytest-benchmark:5.1.0
1.1.1
1.1.0
1.1.0 - 2025-09-05
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.
Bugfix
- #241: Switched checks for
ImportQueryandExportQueryto test more explicitly if None (instead of truthy assumptions).
Features
- #235: Support NOCERTCHECK as fingerprint
1.0.1
1.0.1 - 2025-09-03
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.
Bugfix
- #232: Disabled strict certificate check when a fingerprint is provided in the
dsn
argument forpyexasol.connect
1.0.0
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 version1.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 HEADERSAdditionally, 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.1 - Relocked dependencies to resolve CVE-2025-43859 for transitive dependence
h11 - Relocked dependencies for transitive dependencies to resolve CVE-2025-47287
tornadoand CVE-2025-47273 forsetuptools - Relocked 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
urllib3 - Removed 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.2 - Updated dependency
packaging:24.1to25.0 - Updated dependency
pandas:2.2.2to2.3.1 - Added dependency
polars:1.32.2 - Removed dependency
pyopenssl:24.2.1 - Updated dependency
python-rapidjson:1.19to1.21 - Updated dependency
rsa:4.9to4.9.1
dev
- Updated dependency
docutils:0.20.1to0.21.2 - Updated dependency
exasol-integration-test-docker-environment:3.1.0to4.2.0 - Added dependency
exasol-toolbox:1.9.0 - Updated dependency
pytest:8.3.2to8.4.1 - Added dependency
types-ujson:5.10.0.20250326
0.27.0
0.26.0
-
Added dbapi2 compliant driver interface
exasol.driver.websocketontop 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)