web-dev-qa-db-fra.com

Django Erreur de configuration incorrecte des paramètres de base de données

Django (1.5) marche bien pour moi, mais lorsque je lance l’interprète Python (Python 3) pour vérifier certaines choses, je reçois la plus étrange erreur lors de la tentative d’importation - from Django.contrib.auth.models import User -

Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/Django/conf/__init__.py", line 36, in _setup
    settings_module = os.environ[ENVIRONMENT_VARIABLE]
  File "/usr/lib/python3.2/os.py", line 450, in __getitem__
    value = self._data[self.encodekey(key)]
KeyError: b'Django_SETTINGS_MODULE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.2/dist-packages/Django/contrib/auth/models.py", line 8, in <module>
    from Django.db import models
  File "/usr/local/lib/python3.2/dist-packages/Django/db/__init__.py", line 11, in <module>
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/usr/local/lib/python3.2/dist-packages/Django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.2/dist-packages/Django/conf/__init__.py", line 45, in _setup
    % (desc, ENVIRONMENT_VARIABLE))

Django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, 
  but settings are not configured. You must either define the environment 
  variable Django_SETTINGS_MODULE or call settings.configure() 
  before accessing settings.

Comment pourrait-il être mal configuré, alors que cela fonctionne bien en dehors de l'interprète Python? Dans mes paramètres Django, les paramètres DATABASES sont les suivants:

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'Oracle'.
        'NAME': 'Django_db', # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'zamphatta',
        'PASSWORD': 'mypassword91',
        'Host': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '', # Set to empty string for default.
    }
}

... comment est-ce mal configuré?

161
Zamphatta

Vous ne pouvez pas simplement lancer Python et vérifier les choses, Django ne sait pas sur quel projet vous souhaitez travailler. Vous devez faire l'une de ces choses:

  • Utilisez python manage.py Shell
  • Utilisez Django-admin.py Shell --settings=mysite.settings (ou le module de configuration que vous utilisez)
  • Définissez la variable d’environnement Django_SETTINGS_MODULE de votre système d’exploitation sur mysite.settings
  • (Ceci est supprimé dans Django 1.6.) Utilisez setup_environ dans l'interprète python:

    from Django.core.management import setup_environ
    from mysite import settings
    
    setup_environ(settings)
    

Naturellement, le premier moyen est le plus simple.

258
Pavel Anossov

Dans votre python Shell/ipython, faites:

from Django.conf import settings

settings.configure()
37
Montaro

En 2017 avec Django 1.11.5 et python 3.6 (d'après le commentaire, cela fonctionne également avec Python 2.7):

import Django
import os
os.environ.setdefault("Django_SETTINGS_MODULE", "mysite.settings")
Django.setup()

Le .py dans lequel vous mettez ce code devrait être dans mysite (le parent)

20
MagTun

Sur Django 1.9, j'ai essayé le serveur d'exécution Django-admin et j'ai obtenu la même erreur, mais lorsque j'ai utilisé 'python manage.py runserver', j'ai obtenu le résultat souhaité. Cela peut résoudre cette erreur pour beaucoup de gens!

10
Jacob Young

Dans mon cas, je l’ai eu lorsque j’essayais de lancer Django tests via PyCharm. Je pense que c’est parce que PyCharm ne charge pas les paramètres initiaux du projet Django, c’est-à-dire ceux que manage.py Shell exécute initialement. On peut les ajouter au début du script de test ou simplement exécuter les tests avec manage.py test.

Versions:

  • Python 3.5 (dans virtualenv)
  • PyCharm 2016.3.2 Professional
  • Django 1.10
4
Deleet

dans mon propre cas sous Django 1.10.1 fonctionnant sur python2.7.11, j'essayais de démarrer le serveur en utilisant Django-admin runserver au lieu de manage.py runserver dans le répertoire de mon projet.

3
Dev