Errore "Configurazione errata" delle impostazioni di Django DB


170

Django (1.5) funziona bene per me, ma quando accendo l'interprete Python (Python 3) per verificare alcune cose, ottengo l'errore più strano quando provo a importare - 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.

Come potrebbe essere configurato in modo errato, quando funziona bene al di fuori dell'interprete Python? Nelle mie impostazioni di Django, le DATABASESimpostazioni sono:

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.
    }
}

... come viene configurato in modo errato?


Mi sono imbattuto in questo durante l'impostazione di un nuovo progetto. L'ho trovato utile da fare unset DJANGO_SETTINGS_MODULE. Stavo
riscontrando

Risposte:


264

Non puoi semplicemente accendere Python e controllare le cose, Django non sa su quale progetto vuoi lavorare. Devi fare una di queste cose:

  • Uso python manage.py shell
  • Usa django-admin.py shell --settings=mysite.settings(o qualunque modulo di impostazione usi)
  • Impostare DJANGO_SETTINGS_MODULEla variabile di ambiente nel sistema operativo sumysite.settings
  • (Questo è rimosso in Django 1.6) Utilizzare setup_environnell'interprete Python:

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

Naturalmente, il primo modo è il più semplice.


Grazie! Non era abbastanza chiaro per me nella documentazione, o forse l'ho letto e dimenticato quando avevo bisogno di farlo.
Zamphatta,

6
Stranamente non sembra trovare il file 'mysite.settings', ma posso vederlo seduto lì come mysite / settings.py. Ugh! Sto cominciando a odiare Django.
Zamphatta,

3
Sì, setup_environviene rimosso in 1.6, ma --settingsdovrebbe funzionare. Sei sicuro che le tue impostazioni siano più avanti FirstBlog.settingse non solo nella settingsdirectory corrente?
Pavel Anossov,

21
Nessuna delle precedenti ha funzionato per me, ma questa ha fatto:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
Thumbz,

22
In PyCharm il posto dove farlo è Run | Modifica configurazioni | (ad esempio Unittests in project) | Configurazione | Ambiente | Variabili d'ambiente: DJANGO_SETTINGS_MODULE=(project directory name).settings
Bob Stein,

41

Nella tua shell python / ipython fai:

from django.conf import settings

settings.configure()

11
Apps aren't loaded yet.
Daniil Mashkin,

26

Nel 2017 con django 1.11.5 e python 3.6 ( dal commento funziona anche con Python 2.7 ):

import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django.setup()

Il .pyin cui si inserisce questo codice dovrebbe essere in mysite(quello principale)


Grazie mille, nessuna delle altre soluzioni ha funzionato nel mio caso
evnica,

Lavora anche con Python 2.7
Александр,

Questo .py dovrebbe essere posizionato alla radice , il che significa che è insieme a manage.py. Come lo inserisco in cartelle casuali?
anonimo

1
Va notato che questo funzionerà solo se lo metti in cima al tuo file, se lo metti dentro qualcosa del genere if __name__ == "__main__": non funzionerà correttamente :)
Josh Correia

11

Su Django 1.9, ho provato a django-admin runserverottenere lo stesso errore, ma quando l'ho usato python manage.py runserverho ottenuto il risultato desiderato. Questo potrebbe risolvere questo errore per molte persone!


lo stesso, su django 1.10, ma durante il tentativo di eseguire il comando loaddata
amchugh89,

4

Nel mio caso, ho ottenuto questo quando ho provato a eseguire i test di Django attraverso PyCharm. Penso che sia perché PyCharm non carica le impostazioni iniziali del progetto Django, ovvero quelle che vengono manage.py shelleseguite inizialmente. È possibile aggiungerli all'inizio dello script di test o semplicemente eseguire i test usando manage.py test.

versioni:

  • Python 3.5 (in virtualenv)
  • PyCharm 2016.3.2 Professional
  • Django 1.10

3

nel mio caso in django 1.10.1 in esecuzione su python2.7.11, stavo cercando di avviare il server utilizzando django-admin runserveranziché manage.py runservernella directory del mio progetto.


0

Per le persone che usano IntelliJ, con queste impostazioni sono stato in grado di eseguire query dalla shell (su Windows).

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.