2013-03-07 14 views
30

Mam skrypt Pythona, który wymaga, aby zaktualizować bazę danych MySQL, mam tak daleko:Aktualizacja Python MySQL, działa, ale nie aktualizuje tabelę

dbb = MySQLdb.connect(host="localhost", 
     user="user", 
     passwd="pass", 
     db="database") 
try: 
    curb = dbb.cursor() 
    curb.execute ("UPDATE RadioGroups SET CurrentState=1 WHERE RadioID=11") 
    print "Row(s) were updated :" + str(curb.rowcount) 
    curb.close() 
except MySQLdb.Error, e: 
    print "query failed<br/>" 
    print e 

drukuje skryptów Row(s) were updated : z prawidłową liczbę wierszy, które mają RadioID z 11. Jeśli zmienię RadioID na inny numer, którego nie ma w tabeli, będzie to oznaczać Row(s) were updated :0. Jednak baza danych nie jest aktualizowana. Pole CurrentState pozostaje takie samo. Jeśli skopiuję i przeszłam instrukcję SQL do PHPMyAdmin, to działa dobrze.

Odpowiedz

72

użycie

dbb.commit() 

po

curb.execute ("UPDATE RadioGroups SET CurrentState=1 WHERE RadioID=11")

popełnić wszystkie zmiany, które 'załadowane' do serwera mysql

+1

dziękuję. To naprawiło to. – user2144306

21

Jak @Lazykiddy wskazał, trzeba Zatwierdź zmiany po załadowaniu ich do mysql.

Można również użyć tej metody, aby umożliwić ustawienie auto popełnić, tuż po inicjalizacji połączenia MySQL:

dbb.autocommit(True) 

Następnie zostanie ona automatycznie zatwierdzić zmiany wprowadzone w trakcie wykonywania kodu.

+2

To nasuwa jednak pytanie, czy ta funkcja sprawi, że baza danych zostanie zatwierdzona po każdym rodzaju zapytania, nawet SELECT, który w żaden sposób nie zmienia tabeli? – Aaron

2

dwie odpowiedzi są poprawne. Można jednak również to zrobić:

dbb = MySQLdb.connect(host="localhost", 
    user="user", 
    passwd="pass", 
    db="database", 
    autocommit=True) 

dodać trybu automatycznego = true

+1

świetne, takie proste –