2016-12-12 3 views
0

Was ist falsch mit der folgenden Aussage?MySQL Fehler mit Einfügen/Update auf Duplicate Key

Ich versuche, Daten in meine Tabelle einzufügen, aber es zu aktualisieren, wenn es ein doppelter Eintrag ist - wenn ich es laufen, bekomme ich folgende Fehlermeldung:

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updat e temp set impressions = impressions + 1, clicks = clicks + 0, ctr = (ctr +' at line 1")

def insert_or_update_new(self, profile_id, landing_page, keyword, position, impressions, clicks, ctr): 
    try: 
     self.cursor.execute('''insert into temp (profile_id, landing_page, keyword, position, impressions, clicks, ctr) values (%s, %s, %s, %s, %s, %s, %s) on duplicate key update temp set impressions = impressions + %s, clicks = clicks + %s, ctr = (ctr + %s/2)''', (profile_id, landing_page, keyword, position, impressions, clicks, ctr, impressions, clicks, ctr)) 
     self.db.commit() 
    except Exception as e: 
     self.db.rollback() 
     # Rollback in case there is any error 
     return e 

Update: Entfernen doppelte UPDATE - Fehler immer noch da.

+0

Sie haben dupliziertes 'update update'. – cwallenpoole

Antwort

1

Ihre Aussage sollte nicht

on duplicate key update update temp set impressions... 

aussehen, aber

on duplicate key update impressions=... 
+0

Sie Schönheit :) Wird akzeptieren, sobald es mir erlaubt. Irgendeine Erklärung warum das so ist? – Adders

+0

siehe Link von larwa1n unten zur Verfügung gestellt und es gibt eine Syntax, die Sie verwenden können :) – rafwlaz

0

Ihre Aussage enthält das Wort Update zweimal, zu entfernen könnte man den Trick tun :-)

+0

Gut erkannt, jedoch immer noch (1064, "Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion für die richtige Syntax in der Nähe entspricht" set i mpressions = Impressions + 1, Klicks = Klicks + 0, ctr = (ctr + 0/2) 'bei Zeile 1 ") – Adders

+0

Ich denke, das * set * wird auch nicht benötigt. Siehe http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html – Iarwa1n

Verwandte Themen