【问题标题】:Python MySQL Syntax Error - DUPLICATE KEY UPDATEPython MySQL 语法错误 - 重复键更新
【发布时间】:2013-05-21 20:09:49
【问题描述】:

我有以下 MySQL + Python 代码:

data = json.loads(decoded_response)

insert_values = []
cursor = cnx.cursor()
add_data = """INSERT INTO pb_ya_camps (camp_id,camp_name) VALUES (%s,%s) ON DUPLICATE KEY UPDATE VALUES (%s,%s)"""

for jsonData in data["data"]:
        if "No" in jsonData["StatusArchive"]:
                print("...processing campaign ",jsonData["Name"],"into the database.")
                insert_values.append((jsonData["CampaignID"],jsonData["Name"]))

try:
        cursor.executemany(add_data,(insert_values,insert_values))

目前产生以下错误:

MYSQL ERROR: Failed processing format-parameters; 'MySQLConverter' object has no attribute '_tuple_to_mysql'

据我了解,它不喜欢以下内容:

cursor.executemany(add_data,(insert_values,insert_values))

我相信你不能用 Python 做到这一点......但我的问题可能源于不正确的 MySQL 语法。你能看一下吗?

INSERT INTO pb_ya_camps (camp_id,camp_name) VALUES (%s,%s) ON DUPLICATE KEY UPDATE VALUES (%s,%s)

我不确定如何正确使用 ON DUPLICATE KEY UPDATE 而不必重新指定所有值... 这是主要问题。

我已阅读以下内容:LINK TO PREVIOUS EXAMPLE 但是我不想依赖 KEY UPDATE col1 = VALUES(col1) 因为在我的脚本的另一部分中,我有太多列要作为 col = 的一部分继续列出每列的值...

谢谢!

【问题讨论】:

标签: python mysql


【解决方案1】:

根据 MySQL 参考手册,INSERT ... ON DUPLICATE KEY UPDATE 的 MySQL 语法为:

INSERT INTO table (`a`, `b`, `c`) 
VALUES (1, 2, 3)
    ON DUPLICATE KEY UPDATE `c` = `c` + 1;

所以在你的情况下(请注意写camp_id = %scamp_id = VALUES(%s)是一样的:

INSERT INTO `pb_ya_camps` (`camp_id`, `camp_name`) 
VALUES (%s,%s) 
    ON DUPLICATE KEY UPDATE `camp_id` = VALUES(%s), `camp_name` = VALUES(%s)

有关MySQL Reference Manual 的语法的更多信息。

【讨论】:

  • 谢谢格雷格!所以对于我要更新的每一列,我都会指定:“column_name = value”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2018-07-04
  • 2014-10-07
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多