【TDengine 使用环境】
生产环境 /测试/ Poc/预生产环境
【TDengine 版本】
v3.3.7.0
【操作系统以及版本】Ubuntu24.04
【部署方式】容器/非容器部署
【集群节点数】
【集群副本数】
【描述业务影响】
【问题复现路径/shan】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
通过python传入sql命令
sql_cmd = '''拼接的很长的sql命令'''
result = subprocess.run(
['/usr/bin/taos', f'-u{username}', f'-p{password}', f'-d{db_name}', '-s', sql_cmd],
stdout=subprocess.PIPE,
text=True,
encoding='utf-8'
)
提示报错信息:
OSError: [Errno 7] Argument list too long: '/usr/bin/taos'
请问如何解决?或者对于很长的拼接出来的sql_cmd,你们推荐如何下发?
【资源配置】
【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)
这个是python包的限制吧?
如果安装了 TDenigne 的 python 连接器的话,可以直接调用 TDengine python API,不需要转到 taos 命令来执行。
请参考官网文档中 python 连接器的示例:
调用TDengine python API,对传入的sql_cmd的长度有限制么?
TDengine 产品对 sql 长度 限制 1M,但最新的版本扩大到 64M 了。
我传入的执行创建子表的sql_cmd字符串,每条命令之间用”;”隔离,结果用taos_connect.execute(sql_cmd),发现只执行了第一条命令,也就是第一个分号前的命令被执行了。难道taos.execute()一次只能执行一条语句?
那我要插入一万条数据,岂不是要调用这个API一万次?有没有效率更高的办法?
一条sql 中可以拼多条记录的啊。
insert into tableName1 values (‘时间戳1‘, c1,c2,….)(‘时间戳2‘, c1,c2,….)(‘时间戳3‘, c1,c2,….) …… tableName2 values (‘时间戳1‘, c1,c2,….)(‘时间戳2‘, c1,c2,….)(‘时间戳3‘, c1,c2,….) ……
tableNameX values (‘时间戳1‘, c1,c2,….)(‘时间戳2‘, c1,c2,….)(‘时间戳3‘, c1,c2,….) ……
只要 这条 sql 不超过 1M就行。