ClickHouse是一款快速、高效的列式数据库,它的速度比其他数据库要快得多。对于需要处理大量数据的场景而言,ClickHouse具有不可替代的优势。
本文将介绍两种Python连接ClickHouse数据库的方式。
clickhouse-driver是官方提供的一个Python驱动程序,可以轻松地连接ClickHouse数据库。
在命令行中执行以下命令即可安装clickhouse-driver:
pip install clickhouse-driver
import clickhouse_driver
conn = clickhouse_driver.connect(
host='localhost',
port=8123,
user='default',
password=''
)
cursor = conn.cursor()
cursor.execute('SELECT * FROM my_database.my_table LIMIT 10')
result = cursor.fetchall()
print(result)
上述代码中,我们使用connect方法连接ClickHouse,指定了ClickHouse的主机名、端口号、用户名和密码,使用execute方法执行SQL语句并使用fetchall方法获取查询结果。
import clickhouse_driver
conn = clickhouse_driver.connect(
host='localhost',
port=8123,
user='default',
password=''
)
cursor = conn.cursor()
insert_query = 'INSERT INTO my_database.my_table (col1, col2, col3) VALUES'
rows = [
(1, "a", 100),
(2, "b", 200),
(3, "c", 300),
]
values = ','.join(map(str, rows))
query = f'{insert_query} {values}'
cursor.execute(query)
上述代码中,我们使用INSERT INTO语句向ClickHouse插入数据。我们通过连接ClickHouse并使用cursor对象执行INSERT INTO语句实现了数据的插入。这里我们使用了map方法将rows的每一行数据转换为字符串,并使用join方法将其连接成一个单独的字符串,最终拼接成完整的INSERT INTO语句。
Pandas是Python中非常受欢迎的数据处理工具,它可以与ClickHouse数据库轻松地集成,因此我们可以使用pandas dataframe来连接并操作ClickHouse数据库。
在命令行中执行以下命令即可安装clickhouse-clickhouse-driver-pandas:
pip install clickhouse-clickhouse-driver-pandas
import pandas as pd
from clickhouse_driver import Client
client = Client(
host='localhost',
port=8123,
user='default',
password=''
)
query = 'SELECT * FROM my_database.my_table LIMIT 10'
result = client.execute(query)
df = pd.DataFrame(result, columns=['col1', 'col2', 'col3'])
print(df)
上述代码中,我们使用Client方法连接到ClickHouse,然后使用execute方法执行SQL语句并将结果存储在result中,最后使用pandas方法DataFrame将结果转化为DataFrame对象,以便于进行后续的数据处理。
import pandas as pd
from clickhouse_driver import Client
client = Client(
host='localhost',
port=8123,
user='default',
password=''
)
df = pd.DataFrame({
'col1': [1, 2, 3],
'col2': ['a', 'b', 'c'],
'col3': [100, 200, 300]
})
client.execute('CREATE DATABASE IF NOT EXISTS my_database')
client.execute('CREATE TABLE IF NOT EXISTS my_database.my_table (col1 Int64, col2 String, col3 Int64) ENGINE = Memory')
client.execute('INSERT INTO my_database.my_table (col1, col2, col3) VALUES', df.to_records(index=False).tolist())
上述代码中,我们使用pandas dataframe将数据批量插入到ClickHouse数据库中。首先,我们创建DataFrame,并使用tolist方法将其转换为列表,然后使用to_records方法转换为一组记录。最后,我们使用execute方法执行INSERT INTO语句,将DataFrame中的记录插入到ClickHouse中。
本文链接:http://task.lmcjl.com/news/7424.html