跳至主要内容

连接 ClickHouse 云服务的 Python 客户端工作示例

·阅读时间:2 分钟

这是一个关于如何开始使用 Python 和 ClickHouse 云服务的逐步示例。

注意

请记住,Python 版本和库依赖项在不断发展。在尝试此操作时,请确保使用驱动程序和 Python 环境的最新支持版本。

在撰写本文时,我们分别使用的是 clickhouse-connect 驱动程序版本 0.5.23 和 python 3.11.2

步骤

  1. 检查 Python 版本
$  python -V
Python 3.11.2
  1. 我们将在名为 ch-python 的文件夹中组装项目
$ mkdir ch-python
$ cd ch-python
  1. 创建一个名为 requirements.txt 的依赖项文件,其中包含
clickhouse-connect==0.5.23
  1. 创建一个名为 main.py 的 Python 源文件
import clickhouse_connect
import sys
import json

CLICKHOUSE_CLOUD_HOSTNAME = 'HOSTNAME.clickhouse.cloud'
CLICKHOUSE_CLOUD_USER = 'default'
CLICKHOUSE_CLOUD_PASSWORD = 'YOUR_SECRET_PASSWORD'

client = clickhouse_connect.get_client(
host=CLICKHOUSE_CLOUD_HOSTNAME, port=8443, username=CLICKHOUSE_CLOUD_USER, password=CLICKHOUSE_CLOUD_PASSWORD)

print("connected to " + CLICKHOUSE_CLOUD_HOSTNAME + "\n")
client.command(
'CREATE TABLE IF NOT EXISTS new_table (key UInt32, value String, metric Float64) ENGINE MergeTree ORDER BY key')

print("table new_table created or exists already!\n")

row1 = [1000, 'String Value 1000', 5.233]
row2 = [2000, 'String Value 2000', -107.04]
data = [row1, row2]
client.insert('new_table', data, column_names=['key', 'value', 'metric'])

print("written 2 rows to table new_table\n")

QUERY = "SELECT max(key), avg(metric) FROM new_table"

result = client.query(QUERY)

sys.stdout.write("query: ["+QUERY + "] returns:\n\n")
print(result.result_rows)
  1. 创建虚拟环境
chpython$ python -m venv venv
  1. 加载虚拟环境
chpython$ source venv/bin/activate

加载后,您的终端提示符应以 (venv) 为前缀,安装依赖项

(venv) ➜  chpython$ pip install -r requirements.txt
Collecting certifi
Using cached certifi-2023.5.7-py3-none-any.whl (156 kB)
Collecting urllib3>=1.26
Using cached urllib3-2.0.2-py3-none-any.whl (123 kB)
Collecting pytz
Using cached pytz-2023.3-py2.py3-none-any.whl (502 kB)
Collecting zstandard
Using cached zstandard-0.21.0-cp311-cp311-macosx_11_0_arm64.whl (364 kB)
Collecting lz4
Using cached lz4-4.3.2-cp311-cp311-macosx_11_0_arm64.whl (212 kB)
Installing collected packages: pytz, zstandard, urllib3, lz4, certifi, clickhouse-connect
Successfully installed certifi-2023.5.7 clickhouse-connect-0.5.23 lz4-4.3.2 pytz-2023.3 urllib3-2.0.2 zstandard-0.21.0
  1. 启动代码!
(venv) chpython$ venv/bin/python main.py

connected to HOSTNAME.clickhouse.cloud

table new_table created or exists already!

written 2 rows to table new_table

query: [SELECT max(key), avg(metric) FROM new_table] returns:

[(2000, -50.9035)]
提示

如果使用的是旧的 Python 版本(例如 3.9.6),您可能会收到与 urllib3 库相关的 ImportError。在这种情况下,要么将 Python 环境升级到较新的版本,要么在 requirements.txt 文件中将 urllib3 版本固定为 1.26.15