PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python & MySQLdb



jahlives
13-06-2005, 11:36
Hallo zusammen

ich versuche mich gerade ein wenig mit Python und MySQL. Zu diesem Zweck habe ich mir die MySQL Erweiterung für Python runtergeladen und installiert. Das Anzeigen der Datensätze funzt auch schon ganz wunderbar.
Nur kriege ich es nicht hin, dass ein neuer Datensatz in die Tabelle abgelegt wird.
Das ist die Funktion, die Mühe macht. Zum Anlegen eines neuen Datensatzes rufe ich sie mit 0 auf, ansonsten mit der id Nummer aus der DB, wenn ich einen Datensatz ändern will.


def schreiben(nummer):
print "Titel des Films eingeben"
title = raw_input()
print "Schauspieler angeben"
actors = raw_input()
print "Regisseur angeben"
regie = raw_input()
print "Eine Kurzberschreibung des Films angeben"
content = raw_input()

conn = MySQLdb.connect(db="movie",host="127.0.0.1",user="root",passwd="supergeheim")
cursor = conn.cursor()
if nummer == 0:
anzahl = cursor.execute("""insert into movies(title,actors,regie,content) values('%s','%s','%s','%s')""" % (title,actors,regie,content))
print anzahl," Datensaetze wurde hinzugefügt"
conn.close()

Die Operation verursacht keinen Fehler, aber es existiert einfach kein Eintrag in der DB.
System:
WinXP mit MySQL 4.1.12 und Python 2.4.1

Hoffe jemand weiss hier nen Tipp
Danke und Gruss

tobi

Bei allen "Fehlversuchen" die Daten einzutragen wird der Primary Key der Tabelle trotzdem hochgezählt d.h. wenn ich 4 mal versuche einen Datensatz mit der Funktion zu schreiben und danach einen Datensatz mit MySQL-Monitor eingebe, dann ist der Prim Key um 4 höher als der letzte Eintrag :confused:

jahlives
13-06-2005, 17:51
Fall noch jemand Interesse an der Lösung hat (war was ganz dummes):


conn = MySQLdb.connect(db="movie",host="127.0.0.1",user="root",passwd="supergeheim")
cursor = conn.cursor()
if nummer == 0:
anzahl = cursor.execute("""insert into movies(title,actors,regie,content) values('%s','%s','%s','%s')""" % (title,actors,regie,content))
print anzahl," Datensaetze wurde hinzugefügt"
conn.commit()
conn.close()

Ohne conn.commit() werden jegliche Updates der DB verworfen.

Danke und Gruss

tobi

fs111
13-06-2005, 18:28
Das ist normal, Evtl. unterstützt der Treiber auch autocommit, was aber nicht unbedingt performant ist.

fs111

jahlives
13-06-2005, 19:23
Ich hatte mich bei dem Code Schnippel auch genau an mein Python Buch gehalten. Da stand echt mit keinem Wort, dass man dies machen müsse und darum habe ich auch nicht dran gedacht. Ist aber im Prinzip das gleiche wie ein POP-Server (der löscht die per Flag als gelöscht gesetzten Mails ja auch erst wenn die Verbidung mit Quit geschlossen wird und der Server damit in den Update Status geht)

Danke und Gruss

tobi