Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Django] Configurer MySQL

Sujet résolu
    11 avril 2014 à 14:23:01


    Bonjour tout le monde,

    j'essaie de configurer Django pour qu'il utilise une base MySQL.

    J'ai donc installé MySQL-python-1.2.5.win32-py2.7.exe et j'ai vérifié que c'était en ordre avec pip install MySQL-python.

    A l'exécution du server, il me retourne pourtant toujours l'erreur suivante :

     
    Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from_command_line utility.execute() File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:\Python27\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv self.execute(*args, **options.__dict__) File "C:\Python27\lib\site-packages\django\core\management\base.py", line 280, in execute translation.activate('en-us') File "C:\Python27\lib\site-packages\django\utils\translation\__init__.py", lin e 130, in activate return _trans.activate(language) File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l ine 188, in activate _active.value = translation(language) File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l ine 177, in translation default_translation = _fetch(settings.LANGUAGE_CODE) File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l ine 159, in _fetch app = import_module(appname) File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 40, in im port_module __import__(name) File "C:\Python27\lib\site-packages\django\contrib\admin\__init__.py", line 6, in <module> from django.contrib.admin.sites import AdminSite, site File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py", line 4, in <module> from django.contrib.admin.forms import AdminAuthenticationForm File "C:\Python27\lib\site-packages\django\contrib\admin\forms.py", line 6, in <module> from django.contrib.auth.forms import AuthenticationForm File "C:\Python27\lib\site-packages\django\contrib\auth\forms.py", line 17, in <module> from django.contrib.auth.models import User File "C:\Python27\lib\site-packages\django\contrib\auth\models.py", line 48, i n <module> class Permission(models.Model): File "C:\Python27\lib\site-packages\django\db\models\base.py", line 96, in __n ew__ new_class.add_to_class('_meta', Options(meta, **kwargs)) File "C:\Python27\lib\site-packages\django\db\models\base.py", line 264, in ad d_to_class value.contribute_to_class(cls, name) File "C:\Python27\lib\site-packages\django\db\models\options.py", line 124, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length( )) File "C:\Python27\lib\site-packages\django\db\__init__.py", line 34, in __geta ttr__ return getattr(connections[DEFAULT_DB_ALIAS], item) File "C:\Python27\lib\site-packages\django\db\utils.py", line 198, in __getite m__ backend = load_backend(db['ENGINE']) File "C:\Python27\lib\site-packages\django\db\utils.py", line 113, in load_bac kend return import_module('%s.base' % backend_name) File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 40, in im port_module __import__(name) File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 17 , in <module> raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 21: ordinal not in range(128)

    Il me semble pourtant que la configuration suivante est correcte...

    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django', 
        'USER': 'root', 
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
      }
    }

    Une aide serait bienvenue

    D'avance, merci

    Tim

    • Partager sur Facebook
    • Partager sur Twitter
    Pour faire les choses bien, il faut les faire encore mieux.
      11 avril 2014 à 14:44:33

      Pour moi ce n'est pas une erreur propre à la conf de MysqlDB, mais plus le fait que tu as , à un endroit un/des caractère(s) non ASCII "éàèîi..." et que dans ce fichier tu n’as pas indiqué en première ligne la directive d'encodage

      Si tu travailles en UTF-8 :

      #-*- coding:utf-8 -*-

      Ch

      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2014 à 14:51:17

        J'ai rajouté cette ligne dans le settings.py, mais force est de constaté que cela ne marche pas mieux.

        Pour information, la config marche avec une base SQLite (le serveur démarre). Mais SQLite, c'est rigolo un moment, après je veux quelque chose de plus sérieux.

        • Partager sur Facebook
        • Partager sur Twitter
        Pour faire les choses bien, il faut les faire encore mieux.
          11 avril 2014 à 15:08:00

          Tu as essayé le lancer le shell voir si tu avais d'autres infos

          python manage.py shell



          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2014 à 15:20:09

            Tu peux aussi vérifier que ton module est bien installé en tentant de l'importer depuis un shell python , et/ou en listant les modules localement installés

            Depuis un shell python :

            import MySQLdb
            
            help('modules')


            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2014 à 15:21:30


              Il me sort quasiment le même message d'erreur, à savoir :

              Traceback (most recent call last):
                File "manage.py", line 11, in <module>
                  execute_from_command_line(sys.argv)
                File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
              399, in execute_from_command_line
                  utility.execute()
                File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
              392, in execute
                  self.fetch_command(subcommand).run_from_argv(self.argv)
                File "C:\Python27\lib\site-packages\django\core\management\base.py", line 242,
               in run_from_argv
                  self.execute(*args, **options.__dict__)
                File "C:\Python27\lib\site-packages\django\core\management\base.py", line 280,
               in execute
                  translation.activate('en-us')
                File "C:\Python27\lib\site-packages\django\utils\translation\__init__.py", lin
              e 130, in activate
                  return _trans.activate(language)
                File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l
              ine 188, in activate
                  _active.value = translation(language)
                File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l
              ine 177, in translation
                  default_translation = _fetch(settings.LANGUAGE_CODE)
                File "C:\Python27\lib\site-packages\django\utils\translation\trans_real.py", l
              ine 159, in _fetch
                  app = import_module(appname)
                File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 40, in im
              port_module
                  __import__(name)
                File "C:\Python27\lib\site-packages\django\contrib\admin\__init__.py", line 6,
               in <module>
                  from django.contrib.admin.sites import AdminSite, site
                File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py", line 4, in
               <module>
                  from django.contrib.admin.forms import AdminAuthenticationForm
                File "C:\Python27\lib\site-packages\django\contrib\admin\forms.py", line 6, in
               <module>
                  from django.contrib.auth.forms import AuthenticationForm
                File "C:\Python27\lib\site-packages\django\contrib\auth\forms.py", line 17, in
               <module>
                  from django.contrib.auth.models import User
                File "C:\Python27\lib\site-packages\django\contrib\auth\models.py", line 48, i
              n <module>
                  class Permission(models.Model):
                File "C:\Python27\lib\site-packages\django\db\models\base.py", line 96, in __n
              ew__
                  new_class.add_to_class('_meta', Options(meta, **kwargs))
                File "C:\Python27\lib\site-packages\django\db\models\base.py", line 264, in ad
              d_to_class
                  value.contribute_to_class(cls, name)
                File "C:\Python27\lib\site-packages\django\db\models\options.py", line 124, in
               contribute_to_class
                  self.db_table = truncate_name(self.db_table, connection.ops.max_name_length(
              ))
                File "C:\Python27\lib\site-packages\django\db\__init__.py", line 34, in __geta
              ttr__
                  return getattr(connections[DEFAULT_DB_ALIAS], item)
                File "C:\Python27\lib\site-packages\django\db\utils.py", line 198, in __getite
              m__
                  backend = load_backend(db['ENGINE'])
                File "C:\Python27\lib\site-packages\django\db\utils.py", line 113, in load_bac
              kend
                  return import_module('%s.base' % backend_name)
                File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 40, in im
              port_module
                  __import__(name)
                File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 17
              , in <module>
                  raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
              UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 21: ordinal
               not in range(128)

              Aurais-je raté une étape de la configuration de base? Etant nouveau sur Django et Python, il ne faut pas exclure cette éventualité 

              Mais il est vrai que mes erreurs en général contiennent souvent la mention UnicodeDecodeError qui je dois dire est assez tricky :-(

              • Partager sur Facebook
              • Partager sur Twitter
              Pour faire les choses bien, il faut les faire encore mieux.
                11 avril 2014 à 15:27:24


                stopher a écrit:

                Tu peux aussi vérifier que ton module est bien installé en tentant de l'importer depuis un shell python , et/ou en listant les modules localement installés

                Depuis un shell python :

                import MySQLdb
                
                help('modules')




                La commande import MySQLdb me retourne une erreur :

                >>> import MySQLdb
                Traceback (most recent call last):
                  File "<stdin>", line 1, in <module>
                  File "C:\Python27\lib\site-packages\MySQLdb\__init__.py", line 19, in <module>
                
                    import _mysql
                ImportError: DLL load failed: %1 nÆest pas une application Win32 valide.

                La commande help('modules') fonctionne et MySQLdb apparait dans la liste générée. 

                • Partager sur Facebook
                • Partager sur Twitter
                Pour faire les choses bien, il faut les faire encore mieux.
                  11 avril 2014 à 15:37:14

                  Voilà on a trouvé la raison de ton message d'erreur

                      ImportError: DLL load failed: %1 est pas une application Win32 valide.

                  Pour avoir plus d'infos sur les modules il y a un truc sympa avec pydoc, tu entres en ligne de commande : 

                  pydoc -p 12345

                  12345 étant un numéro de port totalement arbitraire, et rendez-vous à l'url : http://localhost:12345

                  Sinon, pour ton problème il semble que tu utilises une version 64bits de Python non ? 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2014 à 15:41:46

                    Oui, il est possible que j'ai installer une version 64bits. Ai-je fait là une erreur?

                    Où est il possible de vérifier? Mais il est hautement probable qu'il s'agisse bien d'une 64 :-/

                    -
                    Edité par admsymfony 11 avril 2014 à 15:44:00

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Pour faire les choses bien, il faut les faire encore mieux.
                      11 avril 2014 à 15:49:00

                      Disons la dispo de packages pre-compilés semble être plus light .. ( il semble que ce soit le cas pour mysqldb ).

                      Deux solutions, recompiler le package mais là je ne connais pas assez l'ecosystéme de windows pour te guider ... là ou sous linux ce sera les doigts dans le nez .

                      Ou sinon installe une version 32bit de python, et utilise cette version pour ton projet.

                      J'ai trouvé une petite note là dessus

                      https://medium.com/learning-to-code/da577d9c436b

                      ch

                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 avril 2014 à 15:54:15

                        Ne serait-il pas plus simple d'installer la version 32bit et virer la 64?

                        En soi, je ne vois pas vraiment d'inconvénients.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Pour faire les choses bien, il faut les faire encore mieux.
                          11 avril 2014 à 16:15:15

                          Merci pour ton aide. J'ai virer la 64bits pour mettre la 32bits. Cela a l'air plus stable aux premiers abords :-)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Pour faire les choses bien, il faut les faire encore mieux.
                            11 avril 2014 à 16:42:43

                            Je confirme que tu as vu juste.

                            Ma base se synchronise :soleil:

                            Encore merci

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Pour faire les choses bien, il faut les faire encore mieux.

                            [Django] Configurer MySQL

                            × 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