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):
la boucle renvoie tous les id de la table 1 par 1.
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;
le tour suivant donnera :
...etc
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;
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...
j'utilise 2 fonctions python :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
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...
Partager