2010-12-14 20 views
1

Ich bin mit Python und MySQLdb speziell eine Datenbank zu füllen, obwohl ein Code, der bis vor kurzem arbeitet wird einen Fehler wirft nach Server bei der Arbeit zu bewegen:MySQLdb Fehler bei der Verwendung von cursor.execute()

Der Code ist :

cursor.execute("""SELECT Entry, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P FROM evaluation""") 

result = cursor.fetchall() 

for record in result: 
    codeno=int(str(record[15])) 
    status, progress, reprocessing = RepStatus_new.get_status(code=codeno, proj_tag=str(record[16]),cache_dir="cache", prod_type="g1") 
    cursor.execute("""UPDATE evaluation SET M=%s WHERE A LIKE %s""",(progress, int(str(record[15])))) 

und die Fehler, die aufkommt ist:

File "mySQLtest.py", line 165, in <module> 
    cursor.execute("""UPDATE evaluation SET M=%s WHERE A LIKE %s""",(progress, int(str(record[15])))) 
    File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 166, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib64/python2.5/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction') 

ich bin nicht sicher, wo dies nicht in Ordnung ist, wie ich diesen Code sagte bis vor kurzem arbeitete. Wenn jemand irgendwelche Vorschläge hat, würden sie sehr geschätzt werden! (I ersetzt Variablen mit Buchstaben-Lese-Fähigkeit zu unterstützen!)

Die Datenbank richtig verbindet, als ich ausgeben kann das „Ergebnis“ nach cursor.fetchall()

Vielen Dank im Voraus

Antwort

3

Es ist ein schnelle Lösung, aber das Ändern von innodb_lock_wait_timeout kann das Problem "Zeitüberschreitung beim Sperren warte überschritten" vorübergehend verschieben. Siehe doc.

Gibt es eine Chance, dass die MySQL-Version, die Engine (s) oder die Konfiguration geändert wurde, als Sie "Server verschoben" haben?

Wenn Sie die Ergebnisse von SHOW ENGINE INNODB STATUS lesen, werden Sie auf die neuesten Sperrprobleme aufmerksam gemacht.

Das letzte Mal habe ich gesehen, wenn ich "bewegte Server", war es wegen des Konflikts/doppelte Skripts/Crons versucht, die gleichen Tabellen zu treffen.

Auf jeden Fall möchten Sie dies möglicherweise auf Serverfault schieben.

Verwandte Themen