You need to enable JavaScript to run this app.
导航
ClickHouse Python Driver
最近更新时间:2024.08.23 17:38:38首次发布时间:2023.12.18 12:14:26

本文介绍如何在 Python 开发环境连接并访问 ByteHouse 云数仓。
ByteHouse 兼容下列开源 ClickHouse Python Driver 程序:

  • mymarilyn/clickhouse-driver (非 Clickhouse 官方驱动,本文已在程序 0.2.6 版本下验证)

说明

需要 Python 3.7 或更高版本的支持。

前提条件

访问 ByteHouse 所需的连接信息,请参考 获取连接信息 获取。

程序安装

从 PyPI 安装

可以通过如下命令,获取最新发布版本的 clickhouse-driver。

pip3 install clickhouse-driver

从 github 安装

开发版本通过如下命令安装。

pip3 install git+https://github.com/mymarilyn/clickhouse-driver@master#egg=clickhouse-driver

安装依赖项

根据您的 Python 版本,您可能需要安装以下依赖项:

  1. pytz : 用于执行时区计算的 pytz 库;
  2. enum34 :用于支持 python 3.4 版本开始提供的内置枚举类。

连接示例

本章节介绍通过 mymarilyn/clickhouse-driver 程序连接 ByteHouse 的基本用法,您可以在程序 Github 主页 获取最新的文档和发布版本信息。

设置连接信息

可参考下面代码样例设置 ByteHouse 连接信息,具体内容可以根据 前提条件 中获取的信息填写。

clickhouse://bytehouse:{API_KEY}@{HOST}:{PORT}/?secure=true

基本用法示例

请参阅以下基本查询的示例代码。按照获取 ByteHouse 连接信息中信息替换下面的 HOST、PORT 和 API_KEY 字段。

from clickhouse_driver import Client as ChClient
def CH_driver_client(API_KEY, HOST, PORT):
    client = ChClient.from_url(f'clickhouse://bytehouse:{API_KEY}@{HOST}:{PORT}/?secure=true')
    return client

if __name__ == '__main__':
    PORT = 19000
    HOST = 'your_tenant_host'
    API_KEY = 'your_api_key'
    client = CH_driver_client(API_KEY, HOST, PORT)

    ### DDL Query
    client.execute("CREATE DATABASE IF NOT EXISTS demo_db_py")
    client.execute("CREATE TABLE IF NOT EXISTS demo_db_py.demo_tb (id INT) ENGINE=CnchMergeTree() ORDER BY tuple()")

    ### DML Query
    print("Inserting data as values...")
    client.execute("INSERT INTO demo_db_py.demo_tb VALUES", [[111], [42], [12]])
    json_data = [
        {
            "id": 86,
        },
        {
            "id": 90,
        }
    ]
    print("Inserting data from JSON...")
    client.execute('INSERT INTO demo_db_py.demo_tb FORMAT JSON', json_data)

    ### DQL Query
    print("Querying data...")
    result_set = client.execute("SELECT * FROM demo_db_py.demo_tb")
    for result in result_set:
        print(result)
    # client.execute("DROP DATABASE IF EXISTS demo_db_py")