通过python调用taos传入sql命令报错"Argument list too long"

【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。

那我要插入一万条数据,岂不是要调用这个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就行。


官网文档中有写入sql的描述,可以先熟悉一下。

好的,多谢您耐心的回答。