2013-05-27 62 views
2

我有以下的MySQL + Python代碼:Python的MySQL的語法錯誤 - 重複密鑰更新

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) 

我不知道如何正確使用對重複密鑰更新,而無需重新指定所有這些值... < < < --- 這是主要的問題。

我已閱讀以下內容:LINK TO PREVIOUS EXAMPLE但是我不想依賴KEY UPDATE col1 = VALUES(col1),因爲在我的腳本的另一部分中,我有太多的列要保留作爲col =每列值...

謝謝!

+0

而不是'(insert_values,insert_values))',嘗試'insert_values * 2'。 – Blender

+0

[MySQLConverter'對象沒有屬性'_tuple_to_mysql'異常與mysql連接器](http://stackoverflow.com/questions/35910023/mysqlconverter-object-has-no-attribute-tuple-to-mysql-exception-with- mysql-c) –

回答

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 = %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

+0

謝謝GregD!所以對於每一列我想更新我會指定:「column_name = value」? – Aivoric

+0

是的,這是正確的。 – GregD

+0

不客氣,Aivoric!祝你的腳本好運! – GregD