Python 连接clickhouse常用的三种方式

1. 概述

ClickHouse是一个开源的分布式列式数据库管理系统,它被设计用于存储和分析大规模数据。Python是一种流行的编程语言,凭借其简洁的语法和丰富的生态系统,成为了数据处理和分析的首选语言之一。在Python中,我们可以使用多种方式与ClickHouse进行连接并操作数据。

本文将详细介绍Python连接ClickHouse的三种常用方式,分别是使用clickhouse-driver、clickhouse-sqlalchemy和pyclickhouse库。每种方式都有其特点和适用场景,可以根据具体需求选择合适的方法。

2. 使用clickhouse-driver

clickhouse-driver是一个Python用于连接ClickHouse的官方驱动程序。它提供了高效的连接池和数据序列化等功能,并且支持大多数ClickHouse的特性和API。

2.1 安装clickhouse-driver

要使用clickhouse-driver,首先需要安装它。可以使用pip命令进行安装:

pip install clickhouse-driver

2.2 创建连接

在使用clickhouse-driver连接ClickHouse之前,首先需要创建一个连接对象。可以使用clickhouse_driver包中的connect函数来创建连接。以下是一个示例:

import clickhouse_driver

conn = clickhouse_driver.connect(
    host='localhost',
    port=9000,
    user='default',
    password='',
    database='default'
)

Python

Copy

上述代码中,我们使用connect函数创建了一个名为conn的连接对象。其中,host参数指定ClickHouse的主机名,port参数指定端口号,user和password参数指定连接的用户名和密码,database参数指定使用的数据库名。

2.3 执行查询

一旦建立连接,就可以使用连接对象执行查询语句了。clickhouse-driver提供了execute函数来执行查询,并返回查询结果。以下是一个示例:

result = conn.execute('SELECT * FROM my_table')

Python

Copy

上述代码中,我们执行了一个简单的SELECT查询,查询了名为my_table的表中的所有数据。查询结果将保存在result对象中。

2.4 插入数据

除了查询,我们还可以使用clickhouse-driver插入数据到ClickHouse中。clickhouse-driver提供了execute函数来执行插入操作。以下是一个示例:

conn.execute('INSERT INTO my_table (col1, col2) VALUES (1, 2)')

Python

Copy

上述代码中,我们在名为my_table的表中插入了一行数据,其中col1和col2是表中的两个列名。

2.5 关闭连接

在完成操作后,我们应该关闭连接以释放资源。可以使用连接对象的close方法来关闭连接。

conn.close()

Python

Copy

3. 使用clickhouse-sqlalchemy

clickhouse-sqlalchemy是一个基于SQLAlchemy的ClickHouse数据库连接库。SQLAlchemy是一个Python SQL工具和对象关系映射(ORM)库,用于简化数据库操作。

3.1 安装clickhouse-sqlalchemy

要使用clickhouse-sqlalchemy,首先需要安装它。可以使用pip命令进行安装:

pip install clickhouse-sqlalchemy

3.2 创建连接

在使用clickhouse-sqlalchemy连接ClickHouse之前,首先需要创建一个连接对象。以下是一个示例:

from clickhouse_sqlalchemy import make_session, get_declarative_base

session = make_session('clickhouse://default:@localhost:9000')
Base = get_declarative_base(bind=session)

Python

Copy

上述代码中,我们使用make_session函数创建了一个名为session的连接对象,使用get_declarative_base函数创建了一个名为Base的基类。其中,clickhouse://default:@localhost:9000是连接字符串,指定ClickHouse的主机名、端口号、用户名和密码。

3.3 执行查询

一旦建立连接,就可以使用连接对象执行查询语句了。clickhouse-sqlalchemy提供了session对象的query方法来执行查询,并返回查询结果。以下是一个示例:

result = session.query(MyTable).all()

Python

上述代码中,我们执行了一个简单的SELECT查询,查询了名为MyTable的表中的所有数据。查询结果将保存在result对象中。

3.4 插入数据

除了查询,我们还可以使用clickhouse-sqlalchemy插入数据到ClickHouse中。clickhouse-sqlalchemy提供了session对象的add方法来执行插入操作。以下是一个示例:

new_record = MyTable(col1=1, col2=2)
session.add(new_record)
session.commit()

Python

上述代码中,我们创建了一个名为new_record的对象,并使用session对象的add方法将其添加到会话中,然后使用commit方法提交更改。

3.5 关闭连接

在完成操作后,我们应该关闭连接。可以使用连接对象的close方法来关闭连接。

session.close()

Python

Copy

4. 使用pyclickhouse

pyclickhouse是一个纯Python编写的ClickHouse客户端库,它提供了简单的API和高度可定制的功能。

4.1 安装pyclickhouse

要使用pyclickhouse,首先需要安装它。可以使用pip命令进行安装:

pip install pyclickhouse

4.2 创建连接

在使用pyclickhouse连接ClickHouse之前,首先需要创建一个连接对象。以下是一个示例:

from pyclickhouse import Client

client = Client(
    host='localhost',
    port=9000,
    user='default',
    password='',
    database='default'
)

Python

Copy

上述代码中,我们使用Client类创建了一个名为client的连接对象。其中,host参数指定ClickHouse的主机名,port参数指定端口号,user和password参数指定连接的用户名和密码,database参数指定使用的数据库名。

4.3 执行查询

一旦建立连接,就可以使用连接对象执行查询语句了。pyclickhouse提供了execute方法来执行查询,并返回查询结果。以下是一个示例:

result = client.execute('SELECT * FROM my_table')

Python

Copy

上述代码中,我们执行了一个简单的SELECT查询,查询了名为my_table的表中的所有数据。查询结果将保存在result对象中。

4.4 插入数据

除了查询,我们还可以使用pyclickhouse插入数据到ClickHouse中。pyclickhouse提供了insert方法来执行插入操作。以下是一个示例:

client.insert('my_table',
              [{'col1': 1, 'col2': 2}, {'col1': 3, 'col2': 4}],
              structure=['col1', 'col2'])

Python

Copy

上述代码中,我们在名为my_table的表中插入了两行数据,数据以字典的形式表示。

4.5 关闭连接

在完成操作后,我们应该关闭连接。可以使用连接对象的disconnect方法来关闭连接。

client.disconnect()

Python

Copy

5. 总结

以上是Python连接ClickHouse常用的三种方式,分别是使用clickhouse-driver、clickhouse-sqlalchemy和pyclickhouse。

6、python pandas.DataFrame 直接写入Clickhouse

由于dataframe读取和存储数据的效率很高。使用客户端方式批量入库。

python 复制代码
client.execute(
     "insert into table values", df.values.tolist()
)
相关推荐
DARLING Zero two♡19 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study21 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
yyfhq22 分钟前
sdnet
python
测试199830 分钟前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope30 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
芊寻(嵌入式)43 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑1 小时前
php 使用qrcode制作二维码图片
开发语言·php