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

Bibliothèques tierces Python Discussion :

MySQL - Phénomène de rémanence


Sujet :

Bibliothèques tierces Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut MySQL - Phénomène de rémanence
    Bonjour à tous
    Je suis en train de développer une appli Python qui sera interfacée avec MySQL
    Mon code Python commence donc par faire un "connect" sur la bdd et récupère l'identifiant de connection qu'il utilisera ensuite jusqu'à la fin.

    Je viens de remarquer que si j'interfère avec ma bdd depuis l'extérieur (style en ligne de commande depuis mysql) alors que mon programme est déjà lancé, les modifs que j'y apporte depuis l'extérieur ne sont pas répercutées.
    Exemple
    1) je lance mon programme
    2) je modifie une table depuis l'extérieur
    3) dans mon programme je fais un "select * from la table" => les modif apportées en 2) n'apparaissent pas

    Pour que les modif apparaissent, faut soit que je quitte mon programme et que j'y revienne, soit que je refasse un connect().

    En revanche, si la modif est faite par le programme alors je n'ai pas de problème.

    Est-ce quelqu'un a déjà remarqué ce fait ? Est-ce normal ? Je pense qu'il y a un phénomène de bufferisation dans mon programme dû au connect initial que je conserve tel quel mais j'aimerais en être sûr. Si c'est ça c'est pas trop grave, car mon programme n'est pas destiné à être interfacé depuis l'extérieur et si qqqun le fait il saura qu'il lui faut alors quitter le programme puis le relancer. Mais si c'est un bug de MySQLdb...

    Merci à tous
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Salut, non non ce n'est pas du tout un bug, c'est simplement qu'un simple "connect()" à une BDD (MySQL ou autre) cache beaucoup d'options.
    Parmis celles-ci les verrous en Lecture/Ecriture, le traitement par lots, ...
    Tu utilise qu'elle API Python pour te connecter à MySQL ? (pyMySQL ?)

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    ...Parmis celles-ci les verrous en Lecture/Ecriture, le traitement par lots, ...
    J'ai cependant pensé à faire du commit de partout...

    Citation Envoyé par mchk0123 Voir le message
    Tu utilise qu'elle API Python pour te connecter à MySQL ? (pyMySQL ?)
    J'utilise MySQLdb http://sourceforge.net/projects/mysql-python

    J'ai remarqué aujourd'hui un autre truc => Si je lance 2 fois mon programme, ben les modif de l'un dans ma bdd sont vues depuis l'autre alors que j'étais persuadé que l'autre ne les verrait pas tant qu'il n'aurait pas fait un "connect"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    J'ai cependant pensé à faire du commit de partout...
    Le commit (si j'ai bonne mémoire), ne t'assure que le lancement de l'exécution d'un lot. En gros, au sein d'un même connection (session), les requêtes sont bufferisée jusqu'au prochain commit (si la session est ouverte en mode lot).

    Par contre tu peut avoir une option cachée à ton connect() qui pose un verrou de partage (lecture et/ou écriture) inter-sessions. Et si le SGBD SQL est correctement programmé, il fera attendre toute demande de connection à ton 2ème client le temps que le 1er termine sa session. D'où du coup un effet de rémanence.

    Citation Envoyé par Sve@r Voir le message
    Je regarde de plus près comment on passe les options, et je te fait un retour.

    Citation Envoyé par Sve@r Voir le message
    J'ai remarqué aujourd'hui un autre truc => Si je lance 2 fois mon programme, ben les modif de l'un dans ma bdd sont vues depuis l'autre alors que j'étais persuadé que l'autre ne les verrait pas tant qu'il n'aurait pas fait un "connect"...
    Arf, autant pour moi, c'est alors que c'est ton 2ème client (et pas ton script python) qui pose pb. Tu devrais regardé de ce côté là. Je suppose que tu utilise la console d'admin MySQL comme 2ème client ?

    Essaye de lancer 2x ta console (et non pas ton script), je parie ma chemise que le pb. rémanence va revenir.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    Par contre tu peut avoir une option cachée à ton connect() qui pose un verrou de partage (lecture et/ou écriture) inter-sessions. Et si le SGBD SQL est correctement programmé, il fera attendre toute demande de connection à ton 2ème client le temps que le 1er termine sa session. D'où du coup un effet de rémanence.
    Euh non. Là le 2° passera en attente et ne renverra rien tant que le premier n'aura pas libéré ses verrous.

    Citation Envoyé par mchk0123 Voir le message
    Arf, autant pour moi, c'est alors que c'est ton 2ème client (et pas ton script python) qui pose pb. Tu devrais regardé de ce côté là. Je suppose que tu utilise la console d'admin MySQL comme 2ème client ?
    J'utilise une console mode texte lancée par la commande "mysql -u user nom_bdd"

    Citation Envoyé par mchk0123 Voir le message
    Essaye de lancer 2x ta console (et non pas ton script), je parie ma chemise que le pb. rémanence va revenir.
    Héhé... tu me dois ta chemise => les modifs de l'une apparaissent bien dans l'autre

    Sympa de chercher mais ce n'est plus trop la peine puisque ça marche dans mon programme. Au début j'ai remarqué le truc parce que j'ai voulu insérer des valeurs "à la main" pour mes tests et j'ai vu que mes valeurs n'apparaissaient pas dans mon programme... mais si les valeurs insérées par l'instance n° 1 de mon programme sont vues par l'instance n° 2, ça me soulage (vu que mon programme est destiné à fonctionner en parallèle sur plusieurs postes connectés à la même bdd...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Pour te donner un exemple de la complexité du verouillage sur MySQL :

    http://dev.mysql.com/doc/refman/5.0/...isolation.html

    Il y a même des verrouillages / lignes (plutôt que par session ou table !).

    Je continu à chercher les options de connect() acceptés par ton API.

Discussions similaires

  1. [Kylix] Kylix attaque Mysql ?
    Par nahmsath dans le forum EDI
    Réponses: 9
    Dernier message: 12/08/2002, 19h37
  2. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 20h09
  3. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

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