【问题标题】:pymssql executemany insert valueerrorpymssql 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])
  • 查看我的更新答案
  • 对,我应该考虑到这一点。已解决,谢谢!

标签: python sql sql-server pymssql executemany


【解决方案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 个。

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2018-12-16
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2020-03-28
    • 2016-11-09
    相关资源
    最近更新 更多