Forums Neueste Beiträge
 

MySQLdb und executemany

17/09/2007 - 17:37 von Albert Hermeling | Report spam
Guten Abend,

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 '(5923952946502478780, 'bernd', 1) 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
 

Lesen sie die antworten

#1 Jan Weiher
18/09/2007 - 11:16 | Warnen spam
Albert Hermeling schrieb:
Guten Abend,

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 '(5923952946502478780, 'bernd', 1) 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


Hallo,
Ohne das jetzt ausprobiert zu haben vermute ich, anhand der
Fehlermeldung, dass sich die SQL-DB an den Newlinezeichen am Anfang
und am Ende stört, und wenn du nur einen Eintrag hast, werden die wohl
nicht (automatisch?) erzeugt.

gruß
Jan

Ähnliche fragen