pymssql executemany 插入值错误

1 投票
1 回答
6293 浏览
提问于 2025-04-18 15:03

我遇到了一个错误:

文件 "pymssql.pyx",第 443 行,在 pymssql.Cursor.executemany (pymssql.c:6616) 文件 "pymssql.pyx",第 417 行,在 pymssql.Cursor.execute (pymssql.c:6057) 文件 "_mssql.pyx",第 943 行, 在 _mssql.MSSQLConnection.execute_query (_mssql.c:9858) 文件 "_mssql.pyx",第 974 行,在 _mssql.MSSQLConnection.execute_query (_mssql.c:9734) 文件 "_mssql.pyx",第 1091 行,在 _mssql.MSSQLConnection.format_and_run_query (_mssql.c:10814) 文件 "_mssql.pyx",第 1113 行,在 _mssql.MSSQLConnection.format_sql_command (_mssql.c:11042) 文件 "_mssql.pyx",第 1797 行,在 _mssql._substitute_params (_mssql.c:18646) ValueError: SQL 中的占位符比可用的参数多

这个错误发生在我尝试批量插入数据到 mssql 表时(使用 executemany)。如果我把相同的数据放在一个执行语句中,或者在 mssql 管理工作室中插入,都是没问题的。

我尝试了用字典和元组来执行 executemany(data) - 结果还是一样。

代码如下:

cursor.executemany("insert table Values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (data))

有什么想法吗?

1 个回答

1

在你的data中,所有的子列表或子元组都应该有21个元素(这就是你SQL查询中%s的数量)。

但是,你的data里还有一些元素的数量是11、12、13、15、16、17、18、19和20。

因此,你会遇到这个错误:sql中的占位符数量(也就是%s的数量)比可用的参数数量(也就是data中的子列表数量)多

要解决这个问题:检查一下你是怎么生成data的,确保每个data里的元素都严格有21个。

撰写回答