IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Update dans une table innodb


Sujet :

MySQL

  1. #1
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut Update dans une table innodb
    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...

  2. #2
    Membre confirmé Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Bon, ça y est j'y suis arrivée;
    Je ne sais pas comment mais bon...
    A force de tout essayer...

    Alors,si ça peut servir à qqn, voilà comment il fallait faire ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    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]
     
    execute_requete (curseur, "SET AUTOCOMMIT = 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, "BEGIN;")
        execute_requete (curseur, requete_update_nom)## execute_requete est une fonction pour lancer la requête
        execute_requete (curseur, "COMMIT;")

    et en fait ce qui me bloquait c'est que j'avais des processus qui sleepaient...

    on le voit avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql> SHOW FULL PROCESSLIST ;
    je les ai tous killés et le lancement du code python a marché ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2013, 16h45
  2. Update dans une table
    Par hoshizora dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 12/06/2012, 13h07
  3. Stocker une requête update dans une table
    Par bigtruck2010 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 07/07/2011, 12h57
  4. Update dans une table
    Par sherve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/03/2009, 12h35
  5. Réponses: 2
    Dernier message: 03/12/2008, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo