所以我一直在尝试使用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,但出现相同的错误。
我尝试了很多事情,但似乎无法正常工作。 我在做什么错了?
答案 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);