Django DB Settings 'Improperly Configured' Error
django, python
Solution
You can't just fire up Python and check things, Django doesn't know what project you want to work on. You have to do one of these things:
- Use `python manage.py shell`
- Use `django-admin.py shell --settings=mysite.settings` (or whatever settings module you use)
- Set `DJANGO_SETTINGS_MODULE` environment variable in your OS to `mysite.settings`
(This is removed in Django 1.6) Use `setup_environ` in the python interpreter:
from django.core.management import setup_environ
from mysite import settings
setup_environ(settings)
Naturally, the first way is the easiest.
Problem
Django (1.5) is workin' fine for me, but when I fire up the Python interpreter (Python 3) to check some things, I get the weirdest error when I try importing - `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. ``` How could it be improperly configured, when it works fine outside the Python interpreter? In my Django settings, the `DATABASES` settings are: ``` 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. } } ``` ...how is this improperly configured?