Hallo, da ich in der News-Gruppe bis jetzt keine Antwort bekommen habe, versuche ich es hier, in der Mailing-List, noch mal. Ich hoffe das es niemanden ärgert. Ich bin dabei mich in das Modul MySQLdb einzuarbeiten. Folgende Funktion soll Daten in die MySQL Datenbank "test" einfügen: #!/usr/bin/python import MySQLdb def insert(): connection = MySQLdb.connect(host="foo", db="test", user="albert", ) c = connection.cursor() r = c.executemany(""" INSERT INTO foobar (my_index, word, anzahl) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE anzahl=anzahl+VALUES(anzahl); """, [ (hash(u"albert"), u"albert", 1), (hash(u"bernd"), u"bernd", 1), (hash(u"martin"), u"martin", 1), (hash(u"heinz"), u"heinz", 2), (hash(u"maria"), u"maria", 1), ] ) # c.connection.commit() return r print insert() wird diese Funktion aufgerufen erzeugt sie folgenden Fehler: Exception _mysql_exceptions.ProgrammingError: (1064, "Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei '\n(5923952946502478780, 'bernd', 1)\n ON DUPLICATE KEY ' in Zeile 1") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x8c1550>> ignored Kommentiere ich, bis auf ein Datensatz, alle aus, funktioniert es wie gewünscht (Vorher Kommentarzeichen entfernen # c.connection.commit() ). Hier das Chreate Skript das die Tabelle foobar in der Datenbnak test erzeugt: CREATE TABLE `foobar` ( `my_index` bigint(20) NOT NULL COMMENT 'Zum Testen', `word` varchar(60) NOT NULL COMMENT 'Das Word', `anzahl` int(11) NOT NULL COMMENT 'Anzahl der Wörter', PRIMARY KEY (`index`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 Das Ganze läuft unter Linux, MySQL Version: 5.0.26-Max Schon mal danke für die Hilfe MfG Albert
Hi Albert, hab gerade mal dein Script getestet und ich muss sagen es funktioniert bei mir ohne Probleme. Vielleicht solltest du kontrollieren ob es irgendwelche Versions-Konflikte gibt.
CREATE TABLE `foobar` ( `my_index` bigint(20) NOT NULL COMMENT 'Zum Testen', `word` varchar(60) NOT NULL COMMENT 'Das Word', `anzahl` int(11) NOT NULL COMMENT 'Anzahl der Wörter', PRIMARY KEY (`index`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
ich nehme an PRIMARY KEY ('my_index')
Das Ganze läuft unter Linux, MySQL Version: 5.0.26-Max
Server: Debian, Mysql 5.0.45 Client: WinXP, Python 2.5.1, MySQLdb 1.2.2 Viel Erfolg bei der Fehlersuche, Alexander
participants (2)
-
A. Nigl
-
Albert Hermeling