Bonjour à tous,

Je me débats avec une malheureuse petite table innodb de rien du tout...
Elle a un id autoincrémenté en clé primaire et 5 autres colonnes ordinaires sans clés étrangères... et je ne suis pas foutue d'arriver à faire un update...

J'ai un script python qui appelle cette table pour faire la requete sur toute mes lignes...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
requete_select_id = "select id from ma_table order by id;"
liste = execute_requete (curseur, requete_select_id) ## On obtient un tuple (id,)
## id = tuple[0]
 
for tuple in liste:
    requete_update_nom = "UPDATE ma_table SET col_nom = \"ok\"  where id = " + tuple[0] + " order by id limit 1;";## tuple[0] est un int autoincrementé à chaque ligne
 
    execute_requete (curseur, requete_update_nom)## execute_requete est une fonction pour lancer la requête

revient à exécuter par exemple, (qd tuple[0] = 5):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
	UPDATE ma_table SET col_nom = "ok"  where id = 5 order by id limit 1;
la boucle renvoie tous les id de la table 1 par 1.
le tour suivant donnera :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
	UPDATE ma_table SET col_nom = "ok"  where id = 6 order by id limit 1;
...etc


Mais asbolument aucun champs n'est update, et je ne comprends rien aux explicationsde verrouillages du manuel...
Je voudrais pouvoir update toute ma colonne au fur et à mesure que ma boucle tourne...
ça ne doit pas être bien compliqué qd même...

le script python fait les 10000 lignes sans lever d'errreurs, ni python , ni mysql. Par contre si je fais la requete à la main pour une seue ligne, mysql me renvoie un time out...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
j'utilise 2 fonctions python :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Etablit la connection avec la base
def connection():
    #connection à la banque (attention à changer selon l'utilisateur.. etc)
    bque = MySQLdb.connect(db="madb",  user="moua")
 
    #ouverture d'un curseur dans la banque
    cursr = bque.cursor()
    return cursr
 
# Fetch le curseur
def execute_requete (cursr,requete):
    # Execute_requete de la requete
    exe = cursr.execute(requete)
    # Recuperation du resutat
    rst = cursr.fetchall()
    return rst
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
#Connection
#=====================
curseur = connection()

Merci beaucoup par avance si vous pouvez me debloquer...