[Python-de] MySQLdb und executemany

Albert Hermeling albert.hermeling at t-online.de
Di Sep 18 08:28:57 UTC 2007


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