pymssql executemany insert valueerror
Posted
技术标签:
【中文标题】pymssql executemany insert valueerror【英文标题】: 【发布时间】:2014-09-19 18:38:23 【问题描述】:我收到一个错误:
文件“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 管理工作室中插入相同的数据就可以了。
我尝试使用字典和元组执行许多(数据) - 结果相同。
代码:
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))
有什么想法吗?
【问题讨论】:
你能发布print(len(data))
和print(set(map(len, data)))
的结果吗?
len(data)==602 set(map(len,data)==set([11,12,13,15,16,17,18,19,20,21])
查看我的更新答案
对,我应该考虑到这一点。已解决,谢谢!
【参考方案1】:
data
中的所有子列表/子元组的长度应为 21(SQL 查询中 %s 的数量)。
但是。您的 data
也有长度为 11、12、13、15、16、17、18、19 和 20 的项目。
你得到错误more placeholders (meaning: %s) in sql than params (meaning: sublists in data) available
解决方法:检查您如何生成 data
并无情地在每个 data
项目中生成 21 个。
【讨论】:
以上是关于pymssql executemany insert valueerror的主要内容,如果未能解决你的问题,请参考以下文章
Django cursor.executemany 每个“executemany”的首选批量大小是多少