2010-12-14 15 views
1

J'utilise python et spécifiquement MySQLdb pour remplir une base de données, même si un code qui travaillait jusqu'à récemment est en train de vomir une erreur après serveurs déplacement au travail:erreur MySQLdb lors de l'utilisation cursor.execute()

Le code est :

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])))) 

et l'erreur qui se pose est:

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') 

Je ne sais pas où cela va mal, comme je le disais ce code a travaillé jusqu'à récemment. Si quelqu'un a des suggestions, il serait très apprécié! (Je l'ai remplacé les variables avec des lettres pour aider la capacité de lecture!)

La base de données est correctement raccordé, que je peux sortir le « résultat » après cursor.fetchall()

Merci à l'avance

Répondre

3

Il est un correction rapide, mais le changement innodb_lock_wait_timeout pourrait différer temporairement le "Lock attente timeout dépassé" problème. Voir doc.

Y a-t-il une chance que la version de MySQL, le (s) moteur (s) ou les config aient changé lorsque vous avez "déplacé des serveurs"? La lecture des résultats de SHOW ENGINE INNODB STATUS vous avertirait de tout problème de verrouillage récent.

La dernière fois que j'ai vu cela quand j'ai "déplacé des serveurs", c'était à cause de scripts/crons en conflit/en double essayant d'atteindre les mêmes tables. Quoi qu'il en soit, vous pourriez vouloir transférer ceci à serverfault.