【问题标题】:'HY000', 'The SQL contains 31 parameter markers, but 32 parameters were supplied' with access mdb file'HY000', 'SQL 包含 31 个参数标记,但提供了 32 个参数' 与访问 mdb 文件
【发布时间】:2016-04-12 22:48:21
【问题描述】:

我正在从 MySQL 复制到 MDB,但遇到了一个奇怪的问题。我有一个问题

cur.execute("""UPDATE SIGN_INVENTORY SET DISTRICT=?, COUNTY=?, CITY=?, ROUTE_ID=?, NEXT_INSPECTION_DATE=?, INSP_FREQ=?, GPS_LATITUDE=?, GPS_LONGITUDE=?,
FABRICATOR=?, CONTRACTOR=?, DATE_ERECTED=?, DATE_LAST_MODIFIED=?, BRIDGE_ID=?, STATE_PLANE=?, BEGIN_NODE=?, BEGIN_OFFSET=?,
SPAN_LENGTH=?, NUMBER_SIGNS=?, TOTAL_SIGN_AREA=?, WALKWAY_LENGTH=?, STRUCTURE_TYPE=?, MESSAGE_TYPE=?, VMS_TYPE=?, MATERIAL_TYPE=?,
CHORD_TYPE=?, POLE_TYPE=?, FOUNDATION_TYPE=?, LAST_INSPECTOR=?, LMOD_USERID=?, LMOD_DATE=?, LMOD_TIME=?
WHERE STRUCTURE_NUMBER=?""", (row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10],
                              row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20],
                              row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30],
                              row[31], row[0]))

我收到了错误

'HY000', 'The SQL contains 31 parameter markers, but 32 parameters were supplied'

现在,如果我删除最后一行[0],我会得到

'HY000', 'The SQL contains 32 parameter markers, but 31 parameters were supplied'

两个数据库中的列完全相同。我在其他多个地方进行了非常相似的查询,它们工作正常。

【问题讨论】:

    标签: python mysql database ms-access pyodbc


    【解决方案1】:

    我想通了。在 MySQL 中,日期字段的存储方式类似于

    datetime.datetime(2002, 7, 22, 0, 0)
    

    这导致参数计数中断。我需要像这样将值转换为 char

    cast(NEXT_INSPECTION_DATE as char)
    

    【讨论】:

      【解决方案2】:

      嘿,伙计,什么都不需要做,只需传递 31 个参数就行了

      看到 1 到 31 在你传递 row[0] 之后总共是 31,这使得总参数计数为 32,这就是你得到那个错误的原因。

      【讨论】:

      • 正如您在我的 OP 中看到的那样,删除它只会翻转计数。该错误实际上与参数计数无关 - 它与 MySQL 存储日期字段的方式有关。
      猜你喜欢
      • 2018-10-17
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2018-03-23
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多