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的主要内容,如果未能解决你的问题,请参考以下文章

怎么用python向sqlserver中导入数据?

Django cursor.executemany 每个“executemany”的首选批量大小是多少

在 sql.executemany(... '(' 附近的语法错误

混合占位符、executemany 和表名

大量行的 MySQLdb 错误的 executemany

如何使用 executemany 处理异常(MySQL 和 Python)