pymssql executemany 插入值错误
我遇到了一个错误:
文件 "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 个回答
在你的data
中,所有的子列表或子元组都应该有21个元素(这就是你SQL查询中%s的数量)。
但是,你的data
里还有一些元素的数量是11、12、13、15、16、17、18、19和20。
因此,你会遇到这个错误:sql中的占位符数量(也就是%s的数量)比可用的参数数量(也就是data中的子列表数量)多
。
要解决这个问题:检查一下你是怎么生成data
的,确保每个data
里的元素都严格有21个。