You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python向Clickhouse插入数据时如何处理单引号问题?

ClickHouse插入含单引号数据报错的解决方法

向ClickHouse插入包含单引号的字符串时,直接拼接SQL语句会触发语法解析错误,出现类似以下的报错:

ServerException: Code: 47.
DB::Exception: Missing columns: 'A'BCD' while processing query: 'A'BCD', required columns: 'A'BCD' 'A'BCD' : While executing ValuesBlockInputFormat.

错误原因

不管是直接用f-string拼接(示例1),还是用repr()处理后拼接(示例2),最终生成的SQL语句里,字符串A'BCD都会被解析成'A'BCD'——ClickHouse会把第一个单引号后的A当成字符串值,紧接着的单引号被误认为SQL语句的结束符,后面的BCD就被当成了列名,从而报“缺少列”的错误。

正确解决方法:使用参数化查询

不要手动拼接SQL语句,利用ClickHouse客户端的参数化查询功能,让客户端自动处理字符串转义:

from clickhouse_driver import Client

client = Client('localhost')
tmp_list = ['A\'BCD','12345','1a2a3a4a']

# 单值多行插入的参数化写法
insert_sql = 'INSERT INTO tmp_table (NAME) VALUES (?), (?), (?)'
client.execute(insert_sql, tmp_list)

# 或者批量构造数据行的写法(更适合大量数据)
data_rows = [(item,) for item in tmp_list]
insert_sql = 'INSERT INTO tmp_table (NAME) VALUES'
client.execute(insert_sql, data_rows)

参数化查询不仅能彻底解决单引号转义问题,还能避免SQL注入风险,是操作数据库时的标准安全做法。

内容的提问来源于stack exchange,提问作者chapy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:42:16