[Résolu] Python 2.6, MySQLdb et Windows, la combinaison perdante ?

Python 2.6, MySQLdb et Windows, la combinaison perdante ? [Résolu] - Python - Programmation

Marsh Posté le 25-01-2010 à 15:24:13    

Bon, je repose ma question, c'était peut-être pas clair :
 
Est-ce que quelqu'un a su installer (et faire tourner) mySQLdb avec Python 2.6, le tout sous Windows ? [:eerilie]
 
Merci pour vos éventuelles réponses.

Message cité 1 fois
Message édité par Profil supprimé le 30-01-2010 à 21:56:18
Reply

Marsh Posté le 25-01-2010 à 15:24:13   

Reply

Marsh Posté le 25-01-2010 à 22:18:57    


 
J'ai fait tourner Python2.5 et Mysql en utilisant MySQL-python-1.2.2.win32-py2.5.exe qu'on peut trouver ici: http://sourceforge.net/projects/my [...] ql-python. Il semble qu'il y ait une version pour Python 2.6. C'est ce que je peux te proposer de plus approchant. Personnellement je ne suis pas passé à Python v2.6 sous Windows parce que j'utilise des outils comme PyQt et PyQw3D et que j'ai pas trouvé le module de ces outils adapté pour python 2.6 Windows
 
Toutefois, j'ai eu un gros ennui avec MySQL+Python sous Windows: j'avais créé un programme de modification/suppression. Ce programme affichait donc les datas que je pouvais ensuite modifier à loisir. Ben mon programme ne voyait pas ses datas insérées (alors qu'une interrogation par MySQL directe affichait bien les datas). Il fallait qu'il fasse une déconnexion/reconnexion MySQL pour qu'il puisse enfin voir ses propres datas.
Chose bizarre: ce problème n'est pas apparu avec Python+MySQL pour Linux.
 
Voici des modules de tests qui permettent de voir le truc
 
Module 1

Code :
  1. #!/usr/bin/env python
  2. # coding: UTF-8 -*-
  3. # Programme principal
  4.  
  5. # Paramètres de travail
  6. __serveur="localhost"
  7. __user="mysql"
  8. __passwd="le mot de passe qui va bien"
  9. __bdd="toto"
  10. __table="tbl"
  11.  
  12. import MySQLdb
  13.  
  14. # Partie 1: Création bdd
  15. id=MySQLdb.connect(__serveur, __user, __passwd)
  16.  
  17. c=id.cursor()
  18. c.execute("drop database if exists %s" % __bdd)
  19. c.execute("create database %s" % __bdd)
  20. c.close()
  21. id.close()
  22.  
  23. # Partie 2: Création et remplissage table
  24. id=MySQLdb.connect(__serveur, __user, __passwd, __bdd)
  25. c=id.cursor()
  26. c.execute("create table %s (nom char(20), prenom char(20))" % __table)
  27. c.close()
  28.  
  29. c=id.cursor()
  30. c.execute("insert into %s (nom, prenom) values('Valjean', 'Jean')" % __table)
  31. c.execute("insert into %s (nom, prenom) values('Hugo', 'Victor')" % __table)
  32. c.execute("insert into %s (nom, prenom) values('Javert', 'Paul')" % __table)
  33. c.close()
  34. id.commit()
  35. id.close()
  36.  
  37. # Partie 3: Affichage n° 1
  38. print
  39. print "Affichage 1"
  40. id=MySQLdb.connect(__serveur, __user, __passwd, __bdd)
  41. c=id.cursor()
  42. c.execute("select * from %s order by nom" % __table)
  43. print c.fetchall()
  44. print "%d lignes\n" % c.rowcount
  45. c.close()
  46.  
  47. # Partie 4: Attente
  48. print
  49. raw_input("Attente - Permet de lancer autre chose - Appuyer sur <return> pour continuer" )
  50.  
  51. # Partie 5: Affichage n° 2
  52. print
  53. print "Affichage 2"
  54. c=id.cursor()
  55. c.execute("select * from %s order by nom" % __table)
  56. print c.fetchall()
  57. print "%d lignes\n" % c.rowcount
  58. c.close()
  59. id.close()


 
Module 2

Code :
  1. #!/usr/bin/env python
  2. # coding: UTF-8 -*-
  3. # Programme principal
  4.  
  5. # Paramètres de travail
  6. __serveur="localhost"
  7. __user="mysql"
  8. __passwd="le mot de passe qui va bien"
  9. __bdd="toto"
  10. __table="tbl"
  11.  
  12. import MySQLdb
  13.  
  14. # Partie 1: Insertion dans table
  15. id=MySQLdb.connect(__serveur, __user, __passwd, __bdd)
  16.  
  17. c=id.cursor()
  18. c.execute("insert into %s (nom, prenom) values('Victor', 'Paul-Emile')" % __table)
  19. c.execute("insert into %s (nom, prenom) values('Emile', 'Paul-Victor')" % __table)
  20. c.close()
  21. id.commit()
  22. id.close()
  23.  
  24. # Partie 2: Affichage unique
  25. print
  26. print "Affichage"
  27. id=MySQLdb.connect(__serveur, __user, __passwd, __bdd)
  28. c=id.cursor()
  29. c.execute("select * from %s order by nom" % __table)
  30. print c.fetchall()
  31. print "%d lignes\n" % c.rowcount
  32. c.close()
  33. id.close()


 
On lance le module 1. Une fois celui-ci lancé, il va créer une table et y insérer 3 datas et les affiche puis se met en attente. Durant cette attente, on lance le module 2 autant de fois qu'on veut. Chaque fois qu'il est lancé, il insère des datas dans la table qu'il affiche (et on voit celles du module 1). Quand on en a assez, on débloque le module 1. Celui-ci réaffiche le contenu de la table qui, pour lui, est resté inchangée. Alors qu'une simple interrogation de la bdd montre bien les datas insérées...
 
Une adaptation de ces modules pour fonctionner avec Postgres ne posent aucun problème.


Message édité par Sve@r le 26-01-2010 à 21:35:24

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-01-2010 à 19:17:02    

Sve@r > J'ai réinstallé le module MySQLdb 1.2.3c1 et cette fois, bizarrement, Python l'a détecté.
 
Cependant, j'ai un autre problème : je n'arrive pas à me connecter à ma base de données, j'ai une belle erreur (2003, "Can't connect to MySQL server on '127.0.0.1' (10061)" ).
 
J'ai tenté de remplacer l'IP ci-dessus par "localhost", mais ça ne marche pas non plus.
 
Pourtant, je n'ai aucun souci avec des modules tels que sqlite3 ou Gadfly :/
 
Est-ce qu'il y aurait un conflit quelque part ?
 
(Pas là bien sûr)
 
Si tu as une idée, je suis preneuse mais dans le cas contraire, je tiens tout de même à te remercier pour toutes tes réponses à mes questions. J'apprécie :jap:  
 

Reply

Marsh Posté le 26-01-2010 à 21:25:10    

Hmm, l'erreur 10061 indique qu'aucun processus n'écoute le port concerné. Donc soit tu te connecte au mauvais port, soit tu n'as pas démarré ton service.

Reply

Marsh Posté le 26-01-2010 à 21:30:42    

[/quotemsg]
 
 
Pour vérifier l'hypothèse de tpierron: tu tentes une connexion directes via la commande mysql depuis un terminal de commande...

Message cité 1 fois
Message édité par Sve@r le 26-01-2010 à 21:31:20

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-01-2010 à 22:25:12    

tpierron a écrit :

Hmm, l'erreur 10061 indique qu'aucun processus n'écoute le port concerné. Donc soit tu te connecte au mauvais port, soit tu n'as pas démarré ton service.


Je me suis connectée via le port 3306.
 
Quant au service, si tu parles de SQL Server, il est activé.
 

Sve@r a écrit :

Pour vérifier l'hypothèse de tpierron: tu tentes une connexion directes via la commande mysql depuis un terminal de commande...


J'ai bien essayé, mais j'ai obtenu l'erreur suivante :
 

Citation :

mysql n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.


 
 

Reply

Marsh Posté le 27-01-2010 à 07:59:51    


Problème de PATH. Au lieu de taper "mysql", tu peux taper "c:\program files\<chemin complet>\mysql.exe" ou alors aller modifier le PATH (clic droit dans "Poste de travail" => propriétés => avancé => variables d'environnement) pour qu'il sache où chercher la commande mysql
 
Sinon pour ton problème principal, j'ai trouvé ça: http://www.developpez.net/forums/d [...] ql-server/. Il semble que ce soit un problème de droit.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-01-2010 à 10:59:38    

Sve@r a écrit :


Problème de PATH. Au lieu de taper "mysql", tu peux taper "c:\program files\<chemin complet>\mysql.exe" ou alors aller modifier le PATH (clic droit dans "Poste de travail" => propriétés => avancé => variables d'environnement) pour qu'il sache où chercher la commande mysql
 
Sinon pour ton problème principal, j'ai trouvé ça: http://www.developpez.net/forums/d [...] ql-server/. Il semble que ce soit un problème de droit.


J'ai testé les deux méthodes :

  • Le chemin absolu : "erreur 2003"
  • Le path : "mysql n'est pas reconnu en tant que commande interne ou externe blablabla..."


J'ai même rebooté en me disant que c'était peut-être nécessaire pour que les modifications soient prises en compte, mais ça n'a rien changé.
C'est désespérant -_-
 
Pour ce qui est de ton lien (je t'en remercie), je n'ai fait que survoler la page pour le moment (pas trop le temps), je m'y plongerai davantage un peu plus tard :jap:  

Reply

Marsh Posté le 27-01-2010 à 12:08:56    

A force d'essayer, j'ai fini par réussir à me connecter via EasyPHP en lignes de commandes :
 

Citation :

C:\Program Files\EasyPHP 3.0\mysql\bin>mysql -u root -h 127.0.0.1 -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.30-community MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>


 
En revanche, quand j'essaie depuis IDLE, j'ai le message suivant qui s'affiche :
 

Citation :

Socket Error: Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée


 
J'ai désactivé le firewall pour voir si ça ne pouvait pas venir de là mais une fois encore, ça n'a rien changé.
 
Faut vraiment être motivée pour le faire tourner le couple Python/MySQL hein [:dams86]

Reply

Marsh Posté le 27-01-2010 à 21:21:42    


 
Bon, ton serveur MySQL fonctionne. Ca c'est une bonne chose
 
 
Le firewall était une bonne piste. Autre chose: quels sont les paramètres de connexion (host, user, password, bdd) que tu passes à MySQLdb ???
 
 
Non. Faut vraiment être motivé pour le faire tourner sous zindow (c'est pas que ça marche pas, c'est que c'est hyper chiant à configurer)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-01-2010 à 21:21:42   

Reply

Marsh Posté le 27-01-2010 à 22:59:17    

Sve@r a écrit :

Le firewall était une bonne piste. Autre chose: quels sont les paramètres de connexion (host, user, password, bdd) que tu passes à MySQLdb ???


import MySQLdb
conn = MySQLdb.connect('localhost', 'root', 'le mot de passe qui va bien :p', 'Musique')
 
Et j'obtiens : OperationalError: (1049, "Base 'Musique' inconnue" )
 
"Musique" n'est qu'un exemple, il ne reconnaît aucune des bases de données que j'ai créées précédemment [:mullet]
 
Pas craquer Sedna, pas craquer...
 

Sve@r a écrit :

Non. Faut vraiment être motivé pour le faire tourner sous zindow (c'est pas que ça marche pas, c'est que c'est hyper chiant à configurer)


Exact !
 

Spoiler :

Pire, c'est sous Vista [:prozac]


Reply

Marsh Posté le 28-01-2010 à 19:50:24    


Bien joué de m'avoir caché le mot de passe, tu ne t'es pas laissée avoir :p
 
Bon, déjà ce n'est plus le même message que dans ton précédent post. Mais les paramètres passés ne correspondent pas tout à fait à ceux que tu passes via une connexion directe. Dans la connexion directe, tu ne demandais aucune bdd. MySQL te projette alors dans la bdd par défaut (qui est mysql je crois). Dans ton programme, tu demandes la connexion sur la bdd "Musique" (en plus avec une majuscule => j'ai eu pas mal de problèmes avec les majuscules sous postgres).
Il te faut essayer avec exactement les mêmes paramètres. Tente-donc une connexion directe sur "Musique" pour voir...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-01-2010 à 22:33:51    

J'ai testé avec et sans majuscule à "Musique", même résultat.  
 
En revanche, en repartant de zéro et en recréant une nouvelle base de données, ça a fonctionné... enfin !  
 
Pour info, je crois que la fameuse base de données Musique avait été créée avec Gadfly ; ceci expliquerait cela, forcément.
 
Autre question : où* donc est stockée la base de données créée avec MySQLdb et quelle est son extension ? :??:  
 
Impossible de la retrouver. Pourtant, je l'ai crée hier soir et interrogée à l'instant, c'est donc qu'elle n'est pas juste en mémoire vive, comme il est possible de le faire avec sqlite3 par exemple ( :memory: ).
 
(DMC proof)

Reply

Marsh Posté le 30-01-2010 à 14:28:08    


Les bdd PostgreSQL sont stockées sous Windows dans "C:\program files\PostgreSQL\data". Sous Linux elles sont dans "/var/pgsql/data". Ces répertoires (que personnellement je déplace dans "C:\Documents and Settings\postgres" pour Windows et "/home/postgres" pour Linux car je ne conçois pas "program files" ou "var" comme des espaces appropriés pour stocker des données) contiennent des sous-dossiers qui servent à PostgreSQL pour gérer les différentes bdd. Il y a donc un dossier par bdd plus un dossier pour la master bdd plus un autre pour x y ou z choses utilisées par PostgreSQL.
Ces dossiers portent des nombres à la place de noms. PostgreSQL faisant lui-même le lien entre nom et nombre. Il y a donc fort à parier que ce soit la même approche avec MySQL car quasiment toutes les bdd fonctionnent généralement de la même façon (sauf Ingres qui a son propre espace de travail dans lequel on ne peut pas mettre le nez).

Message cité 1 fois
Message édité par Sve@r le 30-01-2010 à 14:28:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-01-2010 à 15:18:05    

Sve@r a écrit :


Les bdd PostgreSQL sont stockées sous Windows dans "C:\program files\PostgreSQL\data". Sous Linux elles sont dans "/var/pgsql/data". Ces répertoires (que personnellement je déplace dans "C:\Documents and Settings\postgres" pour Windows et "/home/postgres" pour Linux car je ne conçois pas "program files" ou "var" comme des espaces appropriés pour stocker des données) contiennent des sous-dossiers qui servent à PostgreSQL pour gérer les différentes bdd. Il y a donc un dossier par bdd plus un dossier pour la master bdd plus un autre pour x y ou z choses utilisées par PostgreSQL.
Ces dossiers portent des nombres à la place de noms. PostgreSQL faisant lui-même le lien entre nom et nombre. Il y a donc fort à parier que ce soit la même approche avec MySQL car quasiment toutes les bdd fonctionnent généralement de la même façon (sauf Ingres qui a son propre espace de travail dans lequel on ne peut pas mettre le nez).


J'ai finalement retrouvé ma base de données et avec son véritable nom en plus, bravo la recherche moi j'dis [:tinostar][:bien]
 
Elle se trouve dans un sous-répertoire de EasyPHP (\mysql\data, c'est toi qui m'as mise sur la piste) et porte l'extension .opt. Les tables, quant à elles, sont en .frm.
 
Bizarre qu'elle soit allée se nicher là-bas mais bon, pourquoi pas.
 
Thx ;)  
 

Reply

Marsh Posté le 30-01-2010 à 16:33:34    


Attention à EasyPHP. C'est vrai que cet outil intègre MySQL mais il l'intègre à sa façon. Si tu télécharges le serveur MySQL de base sur le site officiel et que tu l'installes en individuel, l'emplacement des bases ne sera pas tout à fait le même...

Message cité 1 fois
Message édité par Sve@r le 30-01-2010 à 16:34:59

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-01-2010 à 21:53:09    

Sve@r a écrit :


Attention à EasyPHP. C'est vrai que cet outil intègre MySQL mais il l'intègre à sa façon. Si tu télécharges le serveur MySQL de base sur le site officiel et que tu l'installes en individuel, l'emplacement des bases ne sera pas tout à fait le même...


A priori, puisque ça fonctionne ainsi, je ne devrais plus y toucher.
 
Je tenais encore à te remercier pour toutes tes réponses et explications à mes interrogations :jap:  
J'en aurai certainement d'autres. Je vais aborder l'aspect serveur Web et en parallèle, je bosse sur Pylons et SQLAchemy. Mais ça fera l'objet d'autres topics [:parag0n]

Reply

Marsh Posté le 30-01-2010 à 22:09:46    


C'est naturel (au-moins au début)
 
 
On est là pour ça
 
 
Ok. Je connais pas Pylons mais je viens d'aller voir => ça a l'air sympa. Seul bémol, ça ne semble pas être GPL...
 
Conseil: essaye si tu peux de passer sous Linux. L'environnement est bien plus approprié au développement que sous Windows. Et si tu peux migrer de MySQL à PostgreSQL, tu seras pas déçue. Je l'ai fait en septembre dernier pour une appli et je regrette absolument pas. Cet outil intègre en natif un tas de possibilités qui n'existent pas avec MySQL dont un mécanisme de vérification d'intégrité de clef référentielle => si une info dans une table A est utilisée comme référence dans une table B, tu peux demander à Postgres de protéger le lien et de gérer lui-même l'action à faire si on tente de modifier ou supprimer l'info de la table A

Message cité 1 fois
Message édité par Sve@r le 30-01-2010 à 22:45:22

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-01-2010 à 22:37:23    

Sve@r a écrit :

Ok. Je connais pas Pylon mais je viens d'aller voir => ça a l'air sympa.
 
Conseil: essaye si tu peux de passer sous Linux. L'environnement est bien plus approprié au développement que sous Windows. Et si tu peux migrer de MySQL à PostgreSQL, tu seras pas déçue. Je l'ai fait en septembre dernier pour une appli et je regrette absolument pas. Cet outil intègre en natif un tas de possibilités qui n'existent pas avec MySQL dont un mécanisme de vérification d'intégrité de clef référentielle => si une info dans une table A est utilisée comme référence dans une table B, tu peux demander à Postgres de protéger le lien et de gérer lui-même l'action à faire si on tente de modifier ou supprimer l'info de la table A


Linusque, je tatônne encore et sur VM uniquement.
 
Quant à PostgreSQL, il est prévu que j'utilise ce SGBD au cours de mon stage.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed