Releases: exasol/pyexasol
2.2.1
2.2.1 - 2026-04-22
Summary
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.
Security Issues
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 |
- #329: Increased allowed
pytestrange to>=7.0.0,<10"and relocked cryptography,
pygments, and pytest
Dependency Updates
main
- Updated dependency
cryptography:46.0.6to46.0.7
dev
- Updated dependency
exasol-toolbox:6.1.1to6.4.0 - Updated dependency
pytest:8.4.2to9.0.3
2.2.0
2.2.0 - 2026-03-30
Summary
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.
Feature
- #324: Added
ExaConnection.create_prepared_statement
Refactoring
- Relocked
poetry.lockto resolve vulnerable main dependencies:cryptography:46.0.5to46.0.6for CVE-2026-34073orjson:3.11.5to3.11.7for CVE-2025-67221ujson:5.11.0to5.12.0for CVE-2026-32874 and CVE-2026-32875
- Relocked
poetry.lockto resolve vulnerable transitive dependency:requests:2.32.5to2.33.0for CVE-2026-25645tornado:6.5.4to6.5.5for GHSA-78cv-mqj4-43f7 and CVE-2026-25645
- Changed
exasol-toolbox:6.0.0to6.1.1to resolve vulnerable transitive dependency:black:25.12.0to26.3.1for CVE-2026-32274
Dependency Updates
main
- Updated dependency
cryptography:46.0.5to46.0.6 - Updated dependency
orjson:3.11.5to3.11.7 - Updated dependency
ujson:5.11.0to5.12.0
dev
- Updated dependency
exasol-toolbox:6.0.0to6.1.1
2.1.0
2.1.0 - 2026-03-10
Summary
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.
Refactoring
- #303: Updated to
exasol-toolbox5.0.0 - #307: Updated to
exasol-toolbox5.1.1 and re-lockedpoetry.lock - #309: Re-locked
poetry.lockto resolve CVE-2026-26007, which affectedcryptographyversions <= 46.0.4 - #311: Updated to
exasol-toolbox6.0.0 - #317: Added check to
export_to_callbackandimport_from_callbackto ensure that the providedcallbackisCallable; if not, an exception is raised. - #319: Improved error handling in the multithreaded
export_to_callbackso that all recorded exceptions are passed inExaExportError - #313: Improved error handling in the multithreaded
import_from_callbackso that all recorded exceptions are passed inExaImportError - #279: Modified documentation for exception changes in
export_to_callbackandimport_from_callback
Dependency Updates
main
- Updated dependency
cryptography:46.0.3to46.0.5 - Updated dependency
orjson:3.11.4to3.11.5 - Updated dependency
polars:1.34.0to1.37.1 - Updated dependency
pyarrow:22.0.0to23.0.0
dev
- Updated dependency
exasol-toolbox:4.0.0to6.0.0 - Updated dependency
pandas-stubs:2.3.3.251219to2.3.3.260113
2.0.0
2.0.0 - 2026-01-08
This major release:
- drops support for Python 3.9, which reached its end-of-life in 2025-10.
- adds a py.typed file, so that type hints can be propagated from PyExasol
- fixes how
with_column_namesinexport_paramsbehaves. Prior to this version,
ifwith_column_nameswas passed in theexport_params, then it was interpreted as
Trueregardless of what value was paired with it. In this version, this has been
altered so that the expected value must be a boolean. For further information
on the current usage, see the export_params
documentation.
Bugfix
- #265: Improved usage of
with_column_namesinexport_paramsfrom being a flag to being strictly boolean
Refactoring
- #287: Removed unused imports (primarily in test files)
- #289: Dropped support for Python 3.9
- #294: Updated the exasol-integration-test-docker-environment to 5.0.0
- #298: Switched rsa (deprecated) with cryptography, added py.typed file, and widened constraints for pyarrow
- #117: Restricted versions for packaging, python-rapidjson, ujson, and orjson from without bounds to be reasonably bounded.
Internal
Dependency Updates
main
- Updated dependency
pyarrow:21.0.0to22.0.0 - Updated dependency
python-rapidjson:1.22to1.23 - Removed dependency
rsa:4.9.1
dev
- Updated dependency
exasol-integration-test-docker-environment:4.3.0to5.0.0 - Updated dependency
exasol-toolbox:1.12.0to4.0.0 - Added dependency
pandas-stubs:2.3.3.251219
1.3.0
1.2.2
1.2.2 - 2025-11-12
Documentation
- 279: Adapted documentation relating to
export_to_parquetand HTTP transport methods:- Added example exceptions from using
export_to_parquetwhen the default is not overridden and the specified destination directory is not empty - Clarified that the HTTP transport methods utilize three threads so users may see different exceptions based on timing
- Added example exceptions from using
1.2.1
1.2.1 - 2025-10-31
Summary
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.
Bugfix
- #263: Fixed usage of
delimitinexport_to_*functions - #267: Fixed
export_to_parquetto handle new lines & preserve order
Documentation
- #260: Fixed examples for
import_from_parquetto have balanced brackets
Internal
- #271: Re-locked dependencies to resolve CVE-2025-8869 for transitive dependency pip
Dependency Updates
main
- Updated dependency
cryptography:45.0.7to46.0.3 - Updated dependency
orjson:3.11.2to3.11.4 - Updated dependency
pandas:2.3.1to2.3.3 - Updated dependency
polars:1.32.2to1.34.0 - Updated dependency
pyarrow:20.0.0to21.0.0 - Updated dependency
python-rapidjson:1.21to1.22 - Updated dependency
ujson:5.10.0to5.11.0
dev
- Updated dependency
exasol-integration-test-docker-environment:4.2.0to4.3.0 - Updated dependency
exasol-toolbox:1.9.0to1.12.0 - Updated dependency
pytest:8.4.1to8.4.2 - Added dependency
pytest-repeat:0.9.4 - Updated dependency
types-ujson:5.10.0.20250326to5.10.0.20250822
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