Partage
  • Partager sur Facebook
  • Partager sur Twitter

MySQLdb portable ?

    12 décembre 2016 à 11:11:19

    Salut :)

    Pour un projet j'aurais besoin de tapper dans une base et extraire d'une requete SQL un fichier .csv. D'après ce que j'ai trouvé comme bibliothèque, MySQLdb pourrait convenir. A l’installation il est dit que "Microsoft Vicuall C++ 9.0 or higher is required". Le problème c'est que j'ai besoin que mon script puisse être pseudo portable et puisse fonctionner si seulement python 2.7 est installé. :(

    Comment je pourrais faire ?

    Merci :)

    Edit : Est-ce que sqlite3 pourrais me convenir (au passage je suis juste le plus grand ignorant du monde concerant les db)

    -
    Edité par TheDeerHunter 12 décembre 2016 à 11:26:15

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2016 à 11:24:19

      Hello!

      Bien que non professionnel en Python, je te conseillerais d'utiliser une première librairie pour effectuer tes requêtes SQL, puis de transformer plus tard ces résultats en CSV.

      En ce qui concerne la connexion à MySQL, tu peux effectivement regarder du côté de MySqlDB. Cependant, les avis sur le net sur cette librairie sont assez partagés, et les développeurs ont l'air d'être plus attachés à `pymysql` qui a l'air plus simple à installer et à utiliser: https://github.com/PyMySQL/PyMySQL

      Une fois que tu auras fait tes requêtes et récupéré tes informations, tu pourras alors les transformer en format CSV. Pour cela, tu peux le faire manuellement (le format CSV est assez simple à appréhender), ou utiliser une libraire comme celle proposée nativement par Python: https://docs.python.org/2/library/csv.html

      EDIT: En ce qui concerne ta nécessité de fonctionnement si *seulement* python 2.7 est installé, je conseillerais plutôt de simplement vérifier la version de python en utilisant une des méthodes décrite dans le lien suivant: http://stackoverflow.com/questions/446052/how-can-i-check-for-python-version-in-a-program-that-uses-new-language-features

      EDIT2: En ce qui concerne Sqlite, il s'agit de quelque chose différent de MySQL. Cela permet de créer une base de données à partir d'un simple fichier texte. Mais je ne pense vraiment pas que ce soit ce dont tu as besoin ici

      J'espère avoir répondu correctement à ta demande!

      Bon courage!

      -
      Edité par El_Matella 12 décembre 2016 à 11:33:01

      • Partager sur Facebook
      • Partager sur Twitter
      Apprenti développeur web - martar.fr
        12 décembre 2016 à 14:32:27

        @El_Matella

        Merci pour la réponse. Çà fonctionne, le tout à partir d'un seul package indépendant ! Exactement ce qu'il me fallait, effectivement  PyMySQL est très simple :D Merci encore.

        Ps : Pas mal ton site :-°

        Edit : Si un débutant comme moi passe sur le post et souhaiterais un code type :

        (la commande ici liste les tables de la base et les stock dans un .csv)

        #!/usr/bin/env python
        # -*- coding: utf-8 -*
        import pymysql
        import csv
        
        host_p = ''
        port_p = 0
        user_p = ''
        pass_p = ''
        db_p = ''
        
        try : 
        	fichier_configuration = 'Configuration.txt'
        	parametres = open(fichier_configuration, 'rb')
        	data = []
        	for row in parametres :
        		if 'host=' in row :
        			host_p = row[5:]
        			host_p = host_p.replace('\n', '')
        			host_p = host_p.replace('\r', '')
        		elif 'port=' in row :
        			port_p = row[5:]
        			port_p = port_p.replace('\n', '')
        			port_p = port_p.replace('\r', '')
        			port_p = int(port_p)
        		elif 'user=' in row :
        			user_p = row[5:]
        			user_p = user_p.replace('\n', '')
        			user_p = user_p.replace('\r', '')
        		elif 'passwd=' in row :
        			pass_p = row[7:]
        			pass_p = pass_p.replace('\n', '')
        			pass_p = pass_p.replace('\r', '')
        		elif 'db=' in row :
        			db_p = row[3:]
        			db_p = db_p.replace('\n', '')
        			db_p = db_p.replace('\r', '')
        			
        	conn = pymysql.connect(host=host_p, port=port_p, user=user_p, passwd=pass_p, db=db_p)
        	cur = conn.cursor()
        	cur.execute("SHOW TABLES")
        	
        	fichierwrite = open('out.csv', 'wb')
        	writer = csv.writer(fichierwrite, delimiter=';')
        	for row in cur:
        		writer.writerow((row))
        	
        	fichierwrite.close()
        	cur.close()
        	conn.close()
        except :
        	print 'La connexion a la base a echoue'

        Les paramètres sont lu dans un fichier texte 'Configuration.txt' situé dans le même dossier du type :

        # Fichier de configuration
        
        # Serveur cible
        host=monserveur(str)
        
        # Port d'accès
        port=monport(int)
        
        # Utilisateurs utilisé (préferer un simple utilisateur n'ayant aucundroit de mofification)
        user=monuser(str)
        
        # Mot de passe
        passwd=monpw(str)
        
        # Nom de base
        db=mabase(str)
        
        # Fin de fichier configuration

        -
        Edité par TheDeerHunter 12 décembre 2016 à 15:46:29

        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2016 à 5:29:32

          Salut,

          pour te simplifier la vie avec ton fichier de configuration https://wiki.python.org/moin/ConfigParserExamples

          • Partager sur Facebook
          • Partager sur Twitter
          Arch : "Keep It Simple, Stupid"

          MySQLdb portable ?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown