TDengine Python连接器是否支持executemany?如何提升写入性能?
TDengine Python 时序数据写入性能优化方案
一、executemany 与参数绑定支持
TDengine Python 原生连接器完全支持executemany和参数绑定,这是解决单条写入性能低下的核心方案。
示例代码
import taos # 建立连接 conn = taos.connect() cursor = conn.cursor() # 假设已创建超级表:CREATE TABLE IF NOT EXISTS sensor_stb (ts TIMESTAMP, temp FLOAT, humi INT) TAGS (device_id INT); # 准备批量写入数据 batch_data = [ (1690000000000, 26.2, 58, 1), (1690000010000, 26.3, 57, 1), (1690000020000, 25.9, 60, 2), (1690000030000, 26.1, 59, 2) ] # 用executemany+参数绑定批量写入 cursor.executemany( "INSERT INTO sensor_device USING sensor_stb TAGS (?) VALUES (?, ?, ?)", batch_data ) conn.commit() # 关闭资源 cursor.close() conn.close()
注意:参数顺序必须和SQL语句中的占位符一一对应,超级表的标签字段和子表的 data 字段都可以用占位符。
二、其他性能提升方法
- 使用专属批量写入接口:部分版本的TDengine Python连接器提供
execute_batch方法,是专为时序数据批量写入优化的接口,性能比executemany更优,示例:
# 假设batch_data是仅包含data字段的二维数组(无需标签字段,若写入固定标签的子表) cursor.execute_batch("INSERT INTO sensor_device_1 VALUES", batch_data)
- 复用连接与减少提交次数:不要每次写入都新建连接,尽量复用同一个连接;批量写入完成后一次性调用
commit,避免频繁提交事务。 - 调整连接参数:建立连接时可设置
batch_size参数(如taos.connect(batch_size=10000)),控制单次发送的数据包大小,适配网络环境。 - 使用表组(Table Group):将同类型、同查询维度的子表归入同一个表组,能大幅提升写入与查询的性能。
- 绝对避免单条循环写入:这是你当前性能差的核心原因,所有写入操作必须以批量方式执行。
内容的提问来源于stack exchange,提问作者JamesLiu
相关产品推荐
相关产品推荐

