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

PyQt Python Discussion :

Connexion à une base de données en ligne [QtSql]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut Connexion à une base de données en ligne
    Bonjour,

    je souhaiterais pouvoir me connecter à la base de données de mon site internet depuis mon application Python Qt.
    Déjà: est-ce possible? Peut-être que les connexions externes sont interdites par mon hébergeur (1&1)?

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
    db.setHostName("adresseDeMaBddEnLigne");
    db.setUserName("monUserName");
    db.setPassword("monPassword");
    db.setDatabaseName("maBdd")
    db.open()
    J'ai bien vérifié que les identifiants, nom de la base etc. sont corrects, ce sont les mêmes que j'utilise pour me connecter dans le code php de mon site.

    Cependant db.open() renvoie toujours False.
    Quelqu'un peut-il m'aider?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Par curiosité j'ai essayé aussi d'accéder à une de mes bases de données chez mon hébergeur avec PyQt4, et: ça ne marche pas non plus. A noter qu'en cas d'erreur à l'ouverture, db.lastError().text() donne un message d'erreur plus explicite que "False".

    J'ai épluché la doc de mon hébergeur, et j'ai trouvé: l'accès extérieur à MySql est bloqué (le port est fermé). Seuls les accès venant du serveur sont permis (par php par exemple). A vérifier si c'est aussi le cas pour 1&1.

    Une solution possible: faire un relai par un script en php ou en python_cgi qui, en s'exécutant côté serveur, répercutera les requêtes venant de l'extérieur vers MySql.

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    Merci pour ta réponse,
    j'ai regardé pour 1&1, effectivement ils bloquent eux aussi l'accès externe aux bases de données.
    J'ai du mal à voir comment faire concrètement ce relais dont tu parles avec un script php? Comment lier ce script à mon programme PyQt?

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Le principe est simple, l'écriture du script le sera moins.

    Imaginons ce script comme une page web écrite en html+php sur le serveur.

    - on l'appelle comme n'importe quelle page web, en lui transmettant des données comme avec un formulaire (=la requête sql).

    - la partie php s'exécute côté serveur: transmet la requête à MySql et reçoit la réponse

    - à la fin d'exécution, la partie php fabrique une réponse en html et la renvoie à l'appelant, qui la reçoit comme le fait un navigateur: il "suffit" d'extraire les données avec un parser html.

    J'ai déjà fait quelque chose d'approchant en python_cgi (exécution côté serveur) pour une calculatrice en ligne (http://calculext.jpvweb.com/), à part que le script communique avec l'interpréteur Python pour faire les calculs et non avec un serveur de base de données. Ça devrait être la même chose en php avec mysql.

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    D'accord,
    mais du coup comment "appeler" mon script, situé sur le serveur 1&1, depuis mon programme python?
    Et comment mon script peut lui communiquer les résultats de la requête SQL?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Au lieu d'utiliser un navigateur comme je l'ai fait avec ma calcultrice, on peut utiliser le module Python urllib2 (urllib sous Python 3.x) pour demander une page web en transmettant une requête, et recevoir le texte html en retour.

    A titre d'exemple, j'ai vu quelque part comment on interroge google à partir de Python 2.7 (ici avec le mot "tyrtamos", qui donnera mon site web en 1er):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import urllib2
     
    html = urllib2.urlopen(urllib2.Request('http://google.fr/search?q=tyrtamos', None, {'User-Agent': 'MyBrowser/0.1'})).read()
     
    print html
    Après, pour extraire les données du texte html, il faut utiliser un parser html (le texte html est un texte arborescent avec des tags, qui fonctionne comme du xml avec quelques particularités). Il existe un module HTMLParser livré avec Python, mais on dit aussi beaucoup de bien de BeautifulSoup (http://www.crummy.com/software/BeautifulSoup/).

    Avec PyQt4, on peut faire un navigateur web complet, aussi je pense que les fonctions existent pour faire la même chose qu'avec Python pur, mais je n'ai jamais cherché.

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

Discussions similaires

  1. [MySQL] Connexion à une base de donnée en ligne
    Par ghost emperor dans le forum VB.NET
    Réponses: 8
    Dernier message: 05/12/2007, 14h09
  2. Réponses: 1
    Dernier message: 25/09/2005, 16h18
  3. ERREUR DE CONNEXION à une base de donnée ACCESS protégée
    Par unionriton dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2005, 09h35
  4. Delphi Connexion à une base de donnée distante par TCP/IP
    Par viecel dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/01/2005, 19h19
  5. Réponses: 3
    Dernier message: 29/03/2004, 18h02

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