【发布时间】:2018-09-10 14:29:15
【问题描述】:
所以我一直在尝试使用 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 个 %s
我也尝试使用这样的 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 但我得到了同样的错误。
我尝试了很多东西,但我似乎无法让它发挥作用。 我做错了什么?
【问题讨论】:
-
不能使用位置参数绑定列名;这是您的代码失败的直接原因。但是,你能告诉我们当插入重复的
ID时应该发生什么的逻辑是什么? -
@TimBiegeleisen 首先我需要插入所有最新的项目,如果一个已经存在我想更新该行的信息,以便它再次更新。我也以这种方式插入语句并且它们确实有效,所以我认为问题出在 ON DUPLICATE KEY 部分。
-
我不同意,q.v.我的回答如下。
标签: python mysql syntax-error