Python & MySQLdb Module

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gast

@Leonidas:
Danke genau das war es. Die Änderungen wurden einfach nicht übernommen. Nun funzt es aber.

Nochmals vielen Dank und Gruss

tobi
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.
Antworten