web-dev-qa-db-fra.com

Erreur "settings.DATABASES mal configurée" lors de l'exécution de syncdb avec Django 1.4

J'ai créé un simple projet Django 1.4 et j'essaie d'émettre syncdb pour créer le schéma db (postgres). J'obtiens cette erreur: -

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/usr/local/lib/python2.6/dist-packages/Django/core/management/commands/syncdb.py", line 57, in handle_noargs
cursor = connection.cursor()
File "/usr/local/lib/python2.6/dist-packages/Django/db/backends/dummy/base.py", line 15, in complain
raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
Django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.Please supply the ENGINE value. Check settings documentation for more details.

Mon fichier settings.py ressemble à: -

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'Oracle'.
        'NAME': 'test',                      # Or path to database file if using sqlite3.
        'USER': 'test',                      # Not used with sqlite3.
        'PASSWORD': 'test',                  # Not used with sqlite3.
        'Host': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
     }
}

Je peux me connecter à la base de données en utilisant psql OK - des idées? Merci d'avance !

36
bzo

Il se peut que Django n'accède pas au fichier settings.py que vous pensez qu'il utilise. Essayez de pointer explicitement Django vers votre fichier de paramètres en utilisant --settings

./manage.py --settings=nameofproject.settings runserver/syncdb

Si cela fonctionne, vous devrez comprendre pourquoi Django importe le mauvais fichier de paramètres.

Avez-vous mis à niveau de 1,3 à 1,4 par accident?

25
Jonas Geiregat

Pour moi, j'ai eu un problème similaire avec Django 1.6 tout à l'heure:

[~ # ~] arrière-plan [~ # ~]

Projet Hero Django 1.6 utilisant la base de données Heroku Postgresql

Je voulais développer directement sur le serveur postgresql (donc ne copiez pas le bit ".postgresql_psycopg2" si vous n'utilisez pas également postgresql)

  • Aucun problème de développement à l'aide de la base de données psql locale
  • Vous avez cette erreur quand j'ai commenté la ligne pour utiliser heroku db

    DATABASES['default'] =  dj_database_url.config(default=os.getenv('DATABASE_URL'))  
    

La tentative initiale était d'ajouter plus de détails, comme une autre ligne,

DATABASES['default']['ENGINE'] = 'Django.db.backends.postgresql_psycopg2'

Cela n'a pas fonctionné, car l'erreur m'a alors demandé NAME, ce qu'elle a rejeté.

[~ # ~] solution [~ # ~]

En fin de compte, cela l'a résolu:

  1. J'ai couru "heroku config" pour voir mes détails présentés au format:

    postgres://user:pass@localhost/dbname
    
  2. J'ai mis à jour le fichier settings.py pour refléter ces détails:

    DATABASES = {
        'default': {
            'ENGINE': 'Django.db.backends.postgresql_psycopg2', 
            'NAME': 'your_heroku_db_name',                     
            'USER': 'your_heroku_db_user_name',
            'PASSWORD': 'your_heroku_password',
            'Host': 'ec2-23-21-133-106.compute-1.amazonaws.com', # Or something like this
            'PORT': '5432',                     
        }
    }
    

    Cette astuce vient de https://stackoverflow.com/a/19719966/870121

    Remarque: mon prochain plan est de les résumer en variables .env plutôt que de les laisser visibles dans settings.py

  3. J'ai ensuite commenté la dernière ligne,

    # DATABASES['default'] =  dj_database_url.config(default=os.getenv('DATABASE_URL'))  
    

    donc BASES DE DONNEES n'a été spécifié qu'une seule fois dans le fichier settings.py

    De cette façon, le programme lit tout ce qui est nécessaire pour se connecter à la base de données PostgreSQL Heroku

    par exemple, maintenant python manage.py syncdb travaille pour moi


Si vous voulez essayer de développer localement, commentez tout ce qui précède et définissez plutôt votre serveur postgresql local et décommentez l'équivalent local de ce qui précède:

DATABASES = {
     'default': {
         'ENGINE': 'Django.db.backends.postgresql_psycopg2',
         'NAME': 'cool01db',
         'USER': '', 
         'PASSWORD': '',
         'Host': 'localhost', # '127.0.0.1' probably works also
         'PORT': '5432',
     }
 }

C'est de https://stackoverflow.com/a/25962586/870121

14
Mark

Il y a deux fichiers 'settings.py' dans votre projet (si votre OS est de type UNIX):

  • On est dans le premier dir
  • On est dans le dir/dir

Vous devez écrire le MOTEUR dans le second (dir/dir/setting.py).

Bonne chance!

4
zwindy

Quel fichier settings.py avez-vous mis à jour? J'ai eu ce même problème au début aussi quand je n'ai pas lu sur les changements de Django de 1.3 à 1.4 qui provoquent des doubles importations. Voici un extrait de https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py . La dernière version de Django (actuellement 1.4.2) est livrée avec une mise en page de projet par défaut mise à jour et un fichier manage.py pour la commande de gestion du projet de démarrage et la mise en page de projet par défaut a changé.

Pour corriger votre erreur, le fichier settings.py correct que vous devez utiliser n'est PAS celui du répertoire principal du projet, c'est celui du répertoire créé dans le répertoire du projet (avec le même nom).

Réinstaller Django a fait l'affaire pour moi (en fait, supprimer le fichier Egg), comme suggéré dans le lien suivant. https://code.djangoproject.com/ticket/18058 Il semble que la mise à niveau de 1.3 à 1.4 semble causer beaucoup de ces problèmes.

0
Adel