pych-client
pych-client is a ClickHouse client for Python built on top of httpx. It targets the HTTP interface and offers the following features:
- Sync (
ClickHouseClient) and async (AsyncClickHouseClient) clients. - Streaming requests and responses.
- Load credentials from environment variables, or from a configuration file.
Installation
# Default Python JSON parser:
pip install pych-client
# Faster orjson parser:
pip install pych-client[orjson]
Usage
from pych_client import AsyncClickHouseClient, ClickHouseClient
# See "Credential provider chain" for more information on credential specification.
credentials = dict(
base_url="http://localhost:8123",
database="default",
username="default",
password=""
)
# The client can be used directly, or as a context manager.
# The context manager will ensure that the HTTP client resources
# are properly cleaned-up on exit.
with ClickHouseClient(**credentials) as client:
# `.bytes()` and `.text()` return the raw response content from the database.
# `.json()` sets the format to `JSONEachRow` and parse the response content.
client.bytes("SELECT arrayJoin([1, 2, 3]) AS a")
# b'1\n2\n3\n'
client.text("SELECT arrayJoin([1, 2, 3]) AS a")
# '1\n2\n3\n'
client.json("SELECT arrayJoin([1, 2, 3]) AS a")
# [{'a': 1}, {'a': 2}, {'a': 3}]
# `.iter_bytes()`, `.iter_text()` and `.iter_json()` return the response content
# as it is received from the database, without buffering the entire response.
# `.iter_text()` iterates on the line of the response.
list(client.iter_bytes("SELECT arrayJoin([1, 2, 3]) AS a"))
# [b'1\n2\n3\n', b'']
list(client.iter_text("SELECT arrayJoin([1, 2, 3]) AS a"))
# ['1', '2', '3']
list(client.iter_json("SELECT arrayJoin([1, 2, 3]) AS a"))
# [{'a': 1}, {'a': 2}, {'a': 3}]
# In addition to the query, the following arguments can be set:
# - `params`: a mapping of query parameters to their values.
# - `data`: a bytes, string or an interator of bytes to send in the request body.
# - `settings`: ClickHouse settings (e.g. `{"default_format": "JSONEachRow"`).
params = {"table": "test_pych"}
client.text('''
CREATE TABLE {table:Identifier} (a Int64, b Int64)
ENGINE MergeTree() ORDER BY (a, b)
''', params)
client.text("INSERT INTO {table:Identifier} VALUES", params, "(1, 2)")
client.text("INSERT INTO {table:Identifier} VALUES", params, [b"(3, 4)", b"(5, 6)"])
client.json("SELECT * FROM {table:Identifier} ORDER BY a", params)
# [{'a': '1', 'b': '2'}, {'a': '3', 'b': '4'}, {'a': '5', 'b': '6'}]
# `AsyncClickHouseClient` offers the same methods:
async with AsyncClickHouseClient(**credentials) as client:
# Example usage for `.json()` and `.iter_json()`:
await client.json("SELECT arrayJoin([1, 2, 3]) AS a")
# [{'a': 1}, {'a': 2}, {'a': 3}]
async for row in client.iter_json("SELECT arrayJoin([1, 2, 3]) AS a"):
...
Command-line interface
pych-client --help
Credential provider chain
The client looks for credentials in a way similar to the AWS SDK:
- If one of
base_url,database,usernameorpasswordis specified, these values will be used. - If none of the previous values are specified, and one of
PYCH_BASE_URL,PYCH_DATABASE,PYCH_USERNAMEorPYCH_PASSWORDenvironment variables are present, these values will be used. - If none of the previous values are specified, and the file
~/.config/pych-client/credentials.jsonexists, the fieldsbase_url,databaseandusernameandpasswordwill be used. - If none of the previous values are specified, the values
http://localhost:8213,defaultanddefaultwill be used.
Metadata
Release files for pych-client 0.4.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pych_client-0.4.7.tar.gz | 8.6 kB | Without provenance | Details for pych_client-0.4.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pych_client-0.4.7-py3-none-any.whl | Python 3 | none | any | Details for pych_client-0.4.7-py3-none-any.whl |
Total release size: 20.4 kB
Release files / pych_client-0.4.7.tar.gz
| Download URL | pych_client-0.4.7.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d0654668d977df462123985717000978d3d5b62d1b18bd3a5c68cd5f1125582
|
|
BLAKE2b-256 checksum How to use checksums |
d5cda89b1b03b19d7bafa569263061de7421964228b7b945cfa88412431dec13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / pych_client-0.4.7-py3-none-any.whl
| Download URL | pych_client-0.4.7-py3-none-any.whl |
|---|---|
| Size | 11.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c19c9bff57c197eda154ba28069a9a55689318bedb02d3332030d3a8fef96f83
|
|
BLAKE2b-256 checksum How to use checksums |
cc2ebfb81d06e85117d4a2de4b0e25d62c7683665b21fb0eeff00d083a1e29ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Security for pych-client 0.4.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.