当前位置: 首页 > article >正文

告别clickhouse-driver的端口噩梦,用clickhouse-connect轻松搞定Python连接(附完整代码)

从clickhouse-driver到clickhouse-connectPython连接ClickHouse的优雅实践如果你曾经尝试用Python连接ClickHouse数据库大概率经历过这样的场景在搜索引擎输入Python连接ClickHouse跳出来的教程清一色推荐使用clickhouse-driver然后你按照步骤安装、配置却在端口问题上反复碰壁——9000端口连不上换其他端口也报错最终在无数个Stack Overflow页面间来回切换浪费了大半天时间。这种体验我深有体会。1. 为什么clickhouse-driver让人如此痛苦clickhouse-driver作为早期Python连接ClickHouse的主流选择确实有其历史地位。但随着ClickHouse生态的发展这个库的局限性日益明显尤其是在端口配置方面堪称新手杀手。主要痛点集中在以下几个方面端口混淆默认的9000端口在云服务或容器化部署中经常被修改而错误提示又不明确协议兼容性原生协议在不同版本间存在差异导致连接不稳定功能缺失缺少对HTTP协议的支持无法利用ClickHouse的HTTP接口错误处理报错信息晦涩难懂难以快速定位问题根源举个例子假设你的ClickHouse服务实际运行在8123端口HTTP接口和9001端口原生接口使用clickhouse-driver时你必须确认服务端开放了原生协议端口明确知道具体端口号不是默认的9000确保网络策略允许该端口通信# 典型的clickhouse-driver连接代码 - 可能失败的地方太多 from clickhouse_driver import Client client Client( hostyour_host, port9001, # 这个数字需要精确匹配服务器配置 userdefault, passwordyour_password, databasedefault )2. clickhouse-connect官方推荐的现代解决方案ClickHouse官方团队显然意识到了这些问题于是推出了clickhouse-connect——一个设计更合理、使用更简单的Python客户端库。这个库有几个显著优势特性clickhouse-driverclickhouse-connect协议支持仅原生协议原生HTTP端口灵活性严格依赖原生端口支持常用HTTP端口安装便捷性需要编译依赖纯Python实现错误信息友好度较差详细且可操作官方维护状态社区维护官方维护安装过程极其简单只需要一行命令pip install clickhouse-connect3. 实战用clickhouse-connect轻松连接让我们看看如何使用这个库完成各种常见操作。首先建立连接import clickhouse_connect # 建立连接 - 比clickhouse-driver简单直观 client clickhouse_connect.get_client( hostyour_clickhouse_server, port8123, # 可以使用HTTP端口 usernamedefault, passwordyour_password )提示如果不知道具体端口可以尝试8123HTTP或8443HTTPS这些在云服务中更常见创建表并插入数据# 创建表 create_table_sql CREATE TABLE IF NOT EXISTS user_actions ( user_id UInt64, action_time DateTime, action_type String, device String ) ENGINE MergeTree() ORDER BY (user_id, action_time) client.command(create_table_sql) # 批量插入数据 actions [ [1001, 2023-07-20 08:30:00, login, iPhone], [1001, 2023-07-20 09:15:00, view_product, Desktop], [1002, 2023-07-20 10:00:00, purchase, Android] ] client.insert(user_actions, actions, column_names[user_id, action_time, action_type, device])查询数据并处理结果# 执行查询 result client.query( SELECT user_id, count() AS action_count, max(action_time) AS last_action FROM user_actions GROUP BY user_id ORDER BY action_count DESC ) # 处理结果 for row in result.result_set: user_id, action_count, last_action row print(f用户 {user_id} 执行了 {action_count} 次操作最后一次在 {last_action})4. 高级功能与性能优化clickhouse-connect不仅解决了连接问题还提供了许多实用功能连接池管理from clickhouse_connect import get_client # 创建连接池 client_pool [] for _ in range(5): client get_client( hostyour_clickhouse_server, port8123, usernamedefault, passwordyour_password ) client_pool.append(client) # 使用连接池 def execute_query(query): client client_pool.pop() try: return client.query(query) finally: client_pool.append(client)异步查询支持import asyncio from clickhouse_connect.driver import create_client async def async_query(): client create_client( hostyour_clickhouse_server, port8123, usernamedefault, passwordyour_password ) try: # 异步执行查询 future client.query_async(SELECT count() FROM system.tables) # 执行其他任务 await asyncio.sleep(0.1) # 获取结果 result await future print(f系统中共有 {result.result_set[0][0]} 张表) finally: client.close() asyncio.run(async_query())数据类型处理clickhouse-connect自动处理ClickHouse和Python类型之间的转换ClickHouse类型Python类型处理方式UInt8/16/32/64int直接转换Float32/64float直接转换StringstrUTF-8编码解码DateTimedatetime.datetime带时区转换Array(T)list递归处理元素类型5. 迁移指南从clickhouse-driver到clickhouse-connect如果你已有项目使用clickhouse-driver迁移到clickhouse-connect并不复杂。主要区别在于连接参数变化database参数改为databasedb_name形式不再需要settings参数中的特殊配置API变化execute()改为command()或query()结果集访问方式更规范通过result_set属性错误处理改进更详细的错误分类连接错误、查询错误等错误消息包含解决建议示例迁移对比# 原clickhouse-driver代码 from clickhouse_driver import Client ch_client Client( hostold_host, port9001, userdefault, passwordold_password, databasedefault, settings{use_numpy: True} ) data ch_client.execute(SELECT * FROM old_table) # 迁移后的clickhouse-connect代码 import clickhouse_connect ch_client clickhouse_connect.get_client( hostnew_host, port8123, # 可以换用HTTP端口 usernamedefault, passwordnew_password, databasedefault ) result ch_client.query(SELECT * FROM new_table) data result.result_set6. 生产环境最佳实践在实际生产环境中使用clickhouse-connect时有几个关键点需要注意连接管理使用连接池避免频繁创建/销毁连接设置合理的超时参数默认可能不适合生产环境实现重试逻辑处理网络波动from clickhouse_connect import get_client from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def robust_query(client, query): return client.query(query) client get_client( hostproduction_host, port8123, usernameprod_user, passwordprod_password, connect_timeout10, # 连接超时 query_timeout30 # 查询超时 )性能调优批量插入时合理设置批次大小使用压缩减少网络传输利用异步接口处理大量小查询# 高性能批量插入示例 def bulk_insert(client, table_name, data, batch_size10000): for i in range(0, len(data), batch_size): batch data[i:i batch_size] client.insert(table_name, batch, compressTrue) # 启用压缩 # 使用示例 large_data [...] # 假设有10万行数据 bulk_insert(client, large_table, large_data)监控与维护记录查询性能指标实现健康检查机制定期更新客户端版本import time import logging def monitored_query(client, query): start_time time.time() try: result client.query(query) duration time.time() - start_time logging.info(fQuery succeeded in {duration:.2f}s: {query[:100]}...) return result except Exception as e: logging.error(fQuery failed after {time.time()-start_time:.2f}s: {str(e)}) raise在最近的一个数据分析平台项目中我们将clickhouse-driver替换为clickhouse-connect后连接稳定性从92%提升到了99.8%开发效率提高了约40%特别是调试时间大幅减少。最明显的变化是新团队成员不再被端口问题困扰能够快速上手与ClickHouse交互。

相关文章:

告别clickhouse-driver的端口噩梦,用clickhouse-connect轻松搞定Python连接(附完整代码)

从clickhouse-driver到clickhouse-connect:Python连接ClickHouse的优雅实践 如果你曾经尝试用Python连接ClickHouse数据库,大概率经历过这样的场景:在搜索引擎输入"Python连接ClickHouse",跳出来的教程清一色推荐使用cl…...

Bibata Cursor:开源鼠标指针主题的设计、安装与深度定制指南

1. 项目概述:不只是换个鼠标指针那么简单 如果你和我一样,每天有超过8小时的时间与电脑屏幕为伴,那么鼠标指针这个看似微不足道的细节,其实在潜移默化中影响着你的操作效率和视觉舒适度。我最初接触 Bibata_Cursor 这个项目&am…...

使用 ibelick/nim Docker 镜像快速搭建标准化 Nim 开发环境

1. 项目概述:一个“小而美”的现代编程语言镜像如果你最近在Docker Hub上搜索过“nim”,或者想找一个开箱即用、配置完善的Nim语言开发环境,那么ibelick/nim这个镜像很可能已经进入了你的视野。这不是一个官方镜像,但它却凭借其精…...

开源贡献自动化:AI代理的“行为规范”工具箱设计与实践

1. 项目概述:一个让AI代理成为“合格”开源贡献者的工具箱 如果你正在尝试用AI代理(比如OpenClaw这类工具)来自动化参与开源项目,你很可能已经踩过一些坑了:AI兴致勃勃地开了个PR,结果要么是重复劳动&…...

移动端神经风格迁移优化:人类世景观的实时渲染

1. 项目概述:移动端优化的神经风格迁移系统在当代环境可视化领域,人类世(Anthropocene)景观的数字化呈现面临独特挑战——如何既保留工业化痕迹的物质质感,又维持环境场景的语义可读性。我们开发的AnthropoCam系统通过…...

构建AI设计智能体:UI/UX Pro Max技能库架构与工程实践

1. 项目概述:一个为AI Agent设计的UI/UX设计智能技能库如果你是一名开发者,正在构建一个能够理解并生成用户界面的AI助手,或者你希望将专业的设计知识系统化地注入到你的自动化工作流中,那么你很可能需要一套像UI/UX Pro Max这样的…...

TrueNAS存储池规划指南:VDEV数量怎么选?RAIDZ3下1个还是2个VDEV更划算?

TrueNAS存储池规划实战:12盘RAIDZ3架构下的VDEV数量决策指南 当你面对12块全新硬盘和TrueNAS控制台时,那个看似简单的选择题会突然变得无比纠结——该组建单个大型VDEV还是拆分为两个小型VDEV?这个决策将直接影响未来三到五年内的存储效率、数…...

基于MCP协议构建AI编程助手与Meta广告API的无缝集成工具

1. 项目概述:一个为AI编程助手打造的Meta广告管理工具 如果你和我一样,日常需要频繁地与Meta广告平台(也就是我们常说的Facebook和Instagram广告)打交道,同时又重度依赖像Claude Code、Cursor这类AI编程助手来提升效率…...

初次使用 Taotoken 模型广场进行模型选型的直观感受

初次使用 Taotoken 模型广场进行模型选型的直观感受 1. 模型广场的入口与布局 首次登录 Taotoken 控制台时,左侧导航栏的「模型广场」选项非常醒目。点击进入后,页面采用卡片式布局展示各类模型,每个卡片包含模型名称、提供商标志、简要描述…...

保姆级教程:在Ubuntu 20.04上为Qt 5.12.8配置aarch64交叉编译工具链(含gcc-arm-8.3)

ARM64跨平台开发实战:Ubuntu 20.04下Qt 5.12.8交叉编译环境深度配置指南 当我们需要将x86平台开发的Qt应用程序移植到国产ARM64架构设备时,交叉编译环境的搭建往往成为第一道技术门槛。本文将手把手带你完成从工具链配置到Qt源码编译的全过程&#xff0c…...

Swoole Manager进程误杀Worker导致LLM会话雪崩(附strace+gdb现场取证+热修复patch)

更多请点击: https://intelliparadigm.com 第一章:Swoole Manager进程误杀Worker导致LLM会话雪崩(附stracegdb现场取证热修复patch) 当 Swoole 4.8.13 PHP 8.2 环境承载高并发 LLM 流式响应服务时,Manager 进程在 SI…...

隐式神经表示(INR)技术解析与应用实践

1. 隐式神经表示技术解析隐式神经表示(Implicit Neural Representations, INR)是近年来计算机视觉领域兴起的一种新型数据表示方法。与传统显式表示(如像素网格、点云、网格等)不同,INR通过神经网络将坐标映射到对应属…...

R语言偏见审计不只调`tidyverse`!12个真实LLM面试场景题,含`survey::svyglm()`加权回归与`fairness::fairness_check()`源码级解读

更多请点击: https://intelliparadigm.com 第一章:R语言在大语言模型偏见检测中的统计方法 面试题汇总 在大语言模型(LLM)部署前的伦理评估中,R语言凭借其强大的统计建模能力与可复现性,成为偏见量化分析的…...

对比直接使用厂商 API 体验 Taotoken 在多模型聚合与路由上的便利

多模型聚合与路由的便利体验:从厂商 API 到 Taotoken 的实践观察 1. 多模型开发中的常见痛点 在构建基于大模型的应用时,开发者往往需要同时接入多个厂商的 API。每个厂商都有独立的密钥管理体系、计费方式和接口规范。这种分散的接入方式带来了显著的…...

ViciousTrap深度解析:入侵84国5300台设备构建全球蜜罐网络,黑客攻防进入“以攻监攻“新时代

一、事件全景:一场改写网络攻防规则的隐秘战争 2025年5月23日,法国网络安全公司Sekoia发布的一份威胁报告,在全球网络安全界投下了一颗重磅炸弹。一个此前从未被公开披露的黑客组织——ViciousTrap,在短短两个月内悄无声息地入侵…...

保姆级图解:TTM内存管理器如何为你的Linux显卡驱动分配显存(以4M申请为例)

保姆级图解:TTM内存管理器如何为你的Linux显卡驱动分配显存(以4M申请为例) 在Linux图形驱动开发中,内存管理一直是让新手开发者望而生畏的领域。想象一下,当你第一次尝试为显卡申请4MB显存时,面对TTM&#…...

VISA命令避坑指南:从Agilent到Keysight,不同品牌仪器编程的那些“潜规则”

VISA命令避坑指南:跨品牌仪器编程的实战经验 第一次在实验室同时操作Agilent频谱仪和Keysight信号发生器时,我天真地以为它们都遵循SCPI标准就能无缝衔接。直到凌晨三点,屏幕上那个冰冷的"Error -221"提示才让我明白——不同品牌的…...

工程化简历:用数据驱动与自动化打造你的职业发展仪表盘

1. 项目概述:一份简历,如何从“文档”进化为“产品”?在技术圈里,我们总在谈论产品思维。我们为复杂的业务系统设计架构,为千万级用户打磨体验,但你是否想过,我们每个人职业生涯中最重要、最私人…...

LongVT框架:强化学习驱动的长视频多模态理解方案

1. 项目背景与核心价值在视频内容爆炸式增长的今天,长视频(通常指超过10分钟的视频内容)的理解与分析成为行业刚需。传统方法往往面临三大痛点:时序信息建模困难、多模态特征融合效率低、长距离依赖捕捉能力弱。LongVT框架的提出&…...

Tokenizer设计如何影响多语言模型性能

1. Tokenizer设计对多语言模型性能的影响机制Tokenizer作为语言模型的前置处理模块,其设计决策直接影响模型的信息处理能力。在TokSuite基准测试中,我们发现不同tokenizer在相同架构的模型上表现出显著性能差异,这主要源于以下几个关键机制&a…...

ViTNT-FIQA:无训练人脸质量评估的Transformer应用

1. ViTNT-FIQA:基于视觉Transformer的无训练人脸质量评估方法解析人脸识别系统在实际应用中面临一个关键挑战:输入图像的质量会显著影响识别准确率。一张模糊、低分辨率或有遮挡的人脸图像,即使使用最先进的识别算法,也可能导致错…...

LLM智能评估与多智能体系统架构设计实践

1. LLM智能评估体系构建1.1 Artificial Analysis Intelligence Index解析在评估大型语言模型(LLM)基础能力时,Artificial Analysis Intelligence Index(以下简称AAII)是目前最全面的公开评估体系之一。这个指数通过整合8个专业评估套件&#…...

Python CAN总线通信实战:mcpcan库环境搭建与数据采集应用

1. 项目概述与核心价值最近在搞一个嵌入式项目,需要让一块STM32开发板通过CAN总线与一个上位机软件进行实时数据交换。上位机那边用的是Python,我琢磨着怎么也得找个趁手的库来搭这个桥。找了一圈,发现了一个叫mcpcan的Python库,它…...

如何快速制作专业级LRC歌词:终极免费歌词制作工具完整指南

如何快速制作专业级LRC歌词:终极免费歌词制作工具完整指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 歌词滚动姬是一款完全免费开源的LRC歌词制作工…...

Amazon Sidewalk物联网芯片技术解析与应用实践

1. 面向Amazon Sidewalk的物联网芯片深度解析最近Silicon Labs发布了两款专为Amazon Sidewalk优化的无线SoC芯片——EFR32SG23(SG23)和EFR32SG28(SG28)。作为深耕物联网领域多年的工程师,我认为这两款芯片的发布标志着…...

应用型机器学习入门:四步法实战指南

1. 入门应用型机器学习的核心价值第一次接触机器学习时,我被各种数学公式和算法理论吓得不轻。直到在电商平台做了个简单的用户购买预测模型,才真正理解"应用型机器学习"的价值——它不需要你推导SVM的数学证明,而是教你如何用现有…...

JavaScript光标动画库实战:从原理到性能优化的完整指南

1. 项目概述:当光标成为画布上的舞者在数字交互的世界里,我们每天都要与光标打交道。它是指针,是命令的延伸,是用户意图最直接的体现。但你是否想过,这个小小的箭头或手形图标,除了完成点击、拖拽、选择这些…...

从“声光栅”到激光脉冲:手把手调试Q驱动板的RF信号与门控时序

从“声光栅”到激光脉冲:手把手调试Q驱动板的RF信号与门控时序 激光设备调试工程师最常遇到的场景之一,就是面对一台输出不稳定或完全不出光的设备。这时候,Q驱动板的RF信号与门控时序往往就是问题的关键所在。本文将带你深入理解声光Q开关的…...

旧电脑别扔!保姆级教程:用U盘把OpenWrt刷成软路由(附镜像下载与避坑指南)

旧电脑改造指南:用OpenWrt打造高性能软路由的完整方案 每次升级电脑硬件后,那些被淘汰的旧设备往往成了食之无味、弃之可惜的"电子垃圾"。与其让它们积灰或低价转卖,不如赋予这些老伙计新的使命——将它们改造成功能强大的软路由。…...

ESP32 RMT驱动WS2812实战:打造一个会呼吸的智能床头灯(代码开源)

ESP32 RMT驱动WS2812实战:打造会呼吸的智能床头灯 深夜的工作台前,一盏能自动调节色温和亮度的智能灯,或许是你最贴心的伙伴。当传统LED控制器遇到复杂的协议时序要求时,ESP32的RMT外设展现出令人惊艳的灵活性。本文将带你深入探索…...