在重复键更新错误时执行插入:未使用所有参数

时间:2018-09-10 14:29:15

标签: python mysql syntax-error

所以我一直在尝试使用mysql.connector使用python 2.7.15执行此查询。 但是由于某种原因,它似乎无法正常工作,并且总是返回错误:并非所有参数都已使用。

表更新有一个主键,即“ ID”

这是我尝试运行此SQL的查询:

sql = "INSERT INTO updates (ID, insert_datetime, egroup, job_state) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE insert_datetime = VALUES(%s), egroup = VALUES(%s), job_state = VALUES(%s);"
mycursor.executemany(sql, jobUpdatesList)

这是jobUpdatesList数组中的一个数组的样子:

[u'17281725', datetime.datetime(2018, 9, 10, 16, 11, 45, 724000), u'language', u'R', datetime.datetime(2018, 9, 10, 16, 11, 45, 724000), u'language', u'R']

之所以这样做,是因为我需要7个参数,因为我有7个参数

我还尝试仅使用以下4个参数:

sql = "INSERT INTO updates (ID, insert_datetime, egroup, job_state) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE ID = VALUES(%s), insert_datetime = VALUES(%s), egroup = VALUES(%s), job_state = VALUES(%s);"
mycursor.executemany(sql, jobUpdatesList)

这是jobUpdatesList数组中的一个数组的样子:

[u'17281725', datetime.datetime(2018, 9, 10, 16, 18, 9, 268000), u'language', u'R']

但随后出现以下错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s), egroup = VALUES(%s), job_state = VALUES(%s)' at line 1

当我尝试通过将VALUES(%s)替换为'%s'来解决此错误时,它可以工作。除了将所有字段替换为%s而不是值。我也尝试使用未引用的%s来尝试它,例如:egroup =%s,但出现相同的错误。

我尝试了很多事情,但似乎无法正常工作。 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

不可能使用位置参数来表示实际的列名;出于多种原因,列名需要在语句中进行硬编码。但是,在您的情况下,我认为这样做没有任何问题:

pod 'ListKit', :source => 'ssh://git@stash.mycompany:7999/customspec.git'

或者,作为Python代码:

INSERT INTO updates (ID, insert_datetime, egroup, job_state)
VALUES (%s,%s,%s,%s)
ON DUPLICATE KEY UPDATE
    insert_datetime = VALUES(insert_datetime),
    egroup = VALUES(egroup),
    job_state = VALUES(job_state);