我有以下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 =每列的值......
谢谢!
答案 0 :(得分:3)
遵循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 = %s
或camp_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的语法的详细信息。