Seite 1 von 1

Python & MySQLdb Module

Verfasst: Montag 13. Juni 2005, 17:10
von Gast
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.

Code: Alles auswählen

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
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. :?
Ich bin noch ein ziemlicher Newbie auf dem Gebiet von Python ;-)
Danke und Gruss

tobi

Verfasst: Montag 13. Juni 2005, 17:14
von Leonidas
Ich bin mir nicht sicher, aber wenn ich SQLite nutze (das auch die Python DB API 2 benutzt) dann muss ich immer ein connection.commit() machen, damit die Änderungen übernommen werden.

Vielen Dank hat gefunzt

Verfasst: Montag 13. Juni 2005, 17:47
von gast
@Leonidas:
Danke genau das war es. Die Änderungen wurden einfach nicht übernommen. Nun funzt es aber.

Nochmals vielen Dank und Gruss

tobi

Verfasst: Montag 13. Juni 2005, 22:49
von BlackJack
Die übliche Warnung: Die Daten nicht mir '%' in die SQL-Anweisung einfügen, sondern das Tupel einfach als zweiten Parameter von `execute()` angeben. Dann auch die Anführungszeichen bei den '%s' weglassen. Sonst können dumme Sachen passieren, wenn jemand zum Beispiel ein ' im Filmtitel eingibt oder sogar böse Sachen wenn jemand danach gültigen SQL-Code eingibt, der mit Deiner Tabelle rumpfuscht.