Skip to content

chore(deps): bump clickhouse-connect from 1.8.0 to 1.9.0 - #394

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/clickhouse-connect-1.9.0
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/clickhouse-connect-1.9.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 25, 2026

Copy link
Copy Markdown
Contributor

Bumps clickhouse-connect from 1.8.0 to 1.9.0.

Release notes

Sourced from clickhouse-connect's releases.

v1.9.0

clickhouse-connect v1.9.0

ClickHouse Connect 1.9.0 adds native async SQLAlchemy support, Rust codec performance improvements, and fixes across client cleanup, SQLAlchemy, Alembic, and inserts. It includes all changes from the three 1.9.0 release candidates.

Highlights

Features

  • Native async SQLAlchemy support for SQLAlchemy 2.0.44+. Use clickhousedb+async:// with create_async_engine() for buffered Core and ORM execution, DDL, reflection, and Alembic migrations through run_sync(). Use the native AsyncClient for streaming and bulk inserts. #576
  • SQLAlchemy multi-row Insert.values() supports dictionaries, tuples, and SQL expressions, including Pandas to_sql(method="multi"). #1024
  • Opt-in Native Map pairs reads preserve duplicate keys and the order returned by the server. Dictionary output remains the default, and inserts still require dictionaries. #949

Performance

  • Rust codec responses that fit in one chunk avoid starting a read-ahead thread.
  • Rust codec pandas StringDtype results use Arrow buffers directly without first creating Python strings.
  • Synchronous HTTP connections use operating-system socket buffer sizing for large uploads. #1044

Bug fixes

  • Improved async cancellation, initialization, connection disposal, token-provider cleanup, and pool timeout handling.
  • Rust read-ahead threads explicitly close their source iterators, so early cleanup no longer depends on prompt garbage collection.
  • Arrow inserts correctly quote table and database identifiers on both clients. #1014
  • Comments, quoted identifiers, and escaped strings containing LIMIT 0 no longer cause query results to be discarded. Metadata probes that unexpectedly return rows raise InternalError without replaying the query; use raw_query() for those queries. #925
  • Fixed SQLAlchemy DateTime64 precision, Decimal arithmetic, table-engine reflection, Alembic version-table handling, and timezone-aware Date/Date32 inserts.

Compatibility

  • Parameterized DB-API executemany() preserves SQL expressions and sends one request per parameter set. Earlier writes remain committed if a later request fails. Use Client.insert() for Native bulk throughput.
  • SQLAlchemy DateTime64 declarations must match the server schema.
  • Package metadata now uses PEP 639 license fields. Building from source requires setuptools>=77.0.3. #996

Installation

pip install clickhouse-connect

For async SQLAlchemy:

pip install "clickhouse-connect[sqlalchemy-async]"

See the SQLAlchemy guide and full changelog, including the RC1, RC2, and RC3 sections.

v1.9.0rc2

This is the second release candidate for 1.9.0. We're continuing to seek feedback on the native async SQLAlchemy support introduced in RC1. Please try it in your applications and report any issues.

... (truncated)

Changelog

Sourced from clickhouse-connect's changelog.

1.9.0, 2026-09-21

This stable release includes all changes from 1.9.0rc1, 1.9.0rc2, and 1.9.0rc3. See those entries below for the full async SQLAlchemy feature set, Rust codec performance improvements, and fixes included in 1.9.0.

Improvements

  • Added native async SQLAlchemy support for SQLAlchemy 2.0.44 and later. Install clickhouse-connect[sqlalchemy-async] and use clickhousedb+async:// with create_async_engine(). It supports buffered Core and ORM execution, DDL and reflection through run_sync(), and async Alembic environments. Use the native AsyncClient for streaming and bulk inserts. Closes #576.
  • Native Map reads now support the opt-in pairs format, which returns a list of key/value tuples and preserves duplicate keys and the sequence returned by the server. The default remains a dictionary. The format also applies to nested Maps and NumPy/Pandas results. Native Map inserts still require dictionaries and raise DataError for pair lists. Closes #949.

Bug Fixes

  • Rust codec read-ahead threads now close their source iterator explicitly when they stop. Early stream cleanup no longer depends on prompt garbage collection, which can delay cleanup on free-threaded Python.
  • Arrow insert_arrow / insert_df_arrow now quote table and database identifiers the same way insert() does, so hyphenated and other names that need backquotes work on both the sync and async clients. Closes #1014.
  • Queries whose text only appears to end in LIMIT 0 because of // comments, quoted identifiers, or escaped string contents no longer take the columns-only metadata path and discard returned rows. Metadata probes now confirm a real trailing LIMIT 0 against the bound SQL, including chDB, while binary-bound queries use the normal Native path. If a probe still returns rows, as with some UNION, EXCEPT, or EXPLAIN queries, the client raises InternalError after one execution without replaying the query. Use raw_query() to retrieve results for those queries. This addresses the false metadata-probe cases in #925.

Compatibility

  • The package now declares its license with the PEP 639 license_expression field, and the deprecated License :: OSI Approved :: Apache Software License classifier has been removed. Built metadata carries License-Expression: Apache-2.0 and License-File: LICENSE. Building from source now requires setuptools>=77.0.3. Closes #996.

1.9.0rc3, 2026-09-11

Bug Fixes

  • SQLAlchemy Memory, Log, StripeLog, TinyLog, Null, and Set engines now accept the zero-argument and settings= constructor calls emitted by Alembic. SummingMergeTree engines now accept keyword-only columns and preserve explicit summing columns through reflection and Alembic. Existing positional arguments and engine inheritance remain compatible. Closes #946.
  • Synchronous HTTP connections no longer set SO_SNDBUF to 256 KiB, which disabled automatic buffer sizing and could slow large uploads. The operating system now sizes the buffer. The pool manager helpers also honor explicit socket_options instead of replacing them with defaults. Closes #1044.
  • Alembic offline SQL generation no longer fails when include_schemas=True and version_table_schema is unset. Offline mode now skips the current database lookup. Online version table updates and deletes also work when version_table_schema="". Closes #1045.

1.9.0rc2, 2026-09-10

Improvements

  • The Rust codec no longer starts a read-ahead thread for responses that fit in a single chunk. The first chunk is delivered immediately, and the thread starts only after the consumer requests and receives a second chunk. This removes a per-query cost that made many small concurrent queries slower than the Python codec.
  • The Rust codec now builds pandas StringDtype columns for query_df and query_df_stream directly from its Arrow buffers instead of materializing Python strings first. Output values and dtypes are unchanged. String columns that contain invalid UTF-8 keep the existing hex rendering.

1.9.0rc1, 2026-09-09

Improvements

  • Added a native async SQLAlchemy dialect for SQLAlchemy 2.0.44 and later. Install clickhouse-connect[sqlalchemy-async] and use clickhousedb+async:// with create_async_engine(). The first release supports buffered Core and ORM execution, inserts, per-query settings and read formats, server-side parameters, DDL and reflection through run_sync(), Alembic online migrations through AsyncConnection.run_sync(), offline Alembic compilation, and direct access to the native AsyncClient. A checked-in async Alembic environment demonstrates both migration paths. Alembic now adds its integration tag to async client User-Agent headers. SQLAlchemy pool pre-ping uses its standard SELECT 1 check. Closed native sessions are invalidated and replaced, while execution-time server and transport errors keep reusable open HTTP sessions. Pooled connections use distinct generated ClickHouse session IDs by default. A fixed session ID requires a single-connection pool or external serialization. Server-side cursors and AsyncConnection.stream() remain unsupported. AsyncSession.stream() returns a buffered result, and the native client provides streaming APIs for large results. Async executemany inserts issue one request per parameter set instead of using the Native bulk insert protocol. For bulk data, borrow the pool-owned driver_connection and call AsyncClient.insert(). Naive datetime values on the executemany path use naive_datetime_binding. Typed SQLAlchemy DateTime64 binds preserve fractional seconds with client-side and server-side parameters; untyped client-side parameters retain their existing formatting.
  • SQLAlchemy multi-row Insert.values() statements now compile and execute. Rows can be dictionaries, tuples in table column order, or rows containing SQL expressions, with client-side or server-side bind parameters. This also enables Pandas to_sql(method="multi"). See the SQLAlchemy documentation for column selection rules and the bind parameter ceiling that applies to server-side parameters on ClickHouse 26.4 and newer. Closes #1024.

Bug Fixes

  • Failed synchronous client construction now releases its dedicated urllib3 pool manager. Repeated connection or configuration failures no longer leave unused pool managers registered. Caller-supplied and shared pool managers are unchanged.
  • Async requests waiting for a free connection no longer fail when the pool wait exceeds connect_timeout. The timeout still covers DNS, TCP, TLS, and proxy connection setup after a pool slot is available. Closes #1013.
  • SQLAlchemy SQL-text inserts, comparisons, and literal rendering now preserve fractional seconds for typed DateTime64 values, including nested arrays and tuples. DateTime formatting, timezone handling, and Native bulk inserts retain their existing behavior. SQLAlchemy column types must match the server schema: declaring DateTime64 over a server DateTime column can now raise conversion errors, including in IN comparisons. Closes #1030.
  • Native inserts into Date and Date32 columns now accept timezone-aware datetimes and mixed date and datetime values. They preserve each value's calendar date without converting its timezone, including in nullable and nested columns. Low cardinality columns also preserve different calendar dates when their datetime values represent the same instant. Closes #1031.
  • SQLAlchemy arithmetic on ClickHouse Decimal columns and aggregates no longer raises an invalid precision or scale error. Expressions preserve configured operand types and existing numeric promotion behavior. Closes #1027.
  • DB-API Cursor.executemany() now preserves the supplied INSERT statement and applies each parameter set through the normal SQL binding path. Expressions, literals, reordered or repeated named binds, target modifiers, INSERT SELECT, quoted identifiers, and server-side coercion are no longer discarded by a heuristic Native rewrite. Parameterized DB-API inserts issue one HTTP request per parameter set, so rows written before a later failure remain committed. Use Client.insert() when one Native block and its throughput are required. INSERT row counts now aggregate the server's written_rows summaries and report -1 when no reliable count is available. SQLAlchemy keeps Native bulk inserts for compiler-generated plain INSERT statements, while raw SQL and expression-bearing statements use the SQL path. The established placeholder-less INSERT INTO table (columns) VALUES form also keeps its Native compatibility path. In that form, doubled %% in identifiers follows the pyformat contract and sends a literal % identifier. Closes #930, #932, and #934.
  • Multiprocessing workers now reuse one process-local urllib3 PoolManager. Creating and closing clients inside workers no longer retains one unused manager per client. Closes #1016.

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [clickhouse-connect](https://github.com/ClickHouse/clickhouse-connect) from 1.8.0 to 1.9.0.
- [Release notes](https://github.com/ClickHouse/clickhouse-connect/releases)
- [Changelog](https://github.com/ClickHouse/clickhouse-connect/blob/main/CHANGELOG.md)
- [Commits](ClickHouse/clickhouse-connect@v1.8.0...v1.9.0)

---
updated-dependencies:
- dependency-name: clickhouse-connect
  dependency-version: 1.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Sep 25, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies, python. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants