Django数据库设置'错误configuration'错误

Django(1.5)对我来说工作正常,但是当我启动Python解释器(Python 3)来检查一些事情时,当我尝试导入时,我得到了最奇怪的错误 – 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. 

如果在Python解释器外面正常工作,它怎么会被不正确的configuration呢? 在我的Django设置中, DATABASES设置是:

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

…这是如何不正确的configuration?

你不能只启动Python和检查的东西,Django不知道你想要工作的项目。 你必须做这些事情之一:

  • 使用python manage.py shell
  • 使用django-admin.py shell --settings=mysite.settings (或者你使用的任何设置模块)
  • 在您的操作系统中将DJANGO_SETTINGS_MODULE环境variables设置为mysite.settings
  • (这在Django 1.6中被删除)在python解释器中使用setup_environ

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

自然,第一种方法是最简单的。

在你的python shell / ipython中做:

 from django.conf import settings settings.configure() 

在Django 1.9上,我尝试了django-admin runserver并得到了相同的错误,但是当我使用'python manage.py runserver'时,我得到了预期的结果。 这可能为很多人解决这个错误!

在2017年与Django 1.11.5和python3.6:

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

你把这个代码的.py应该在mysite (父类)

在我自己的情况下,在Django 1.10.1上运行python2.7.11,我试图启动服务器使用django-admin runserver而不是我的项目目录中的manage.py runserver

在我的情况下,我试图通过PyCharm运行Djangotesting时得到了这个。 我想这是因为PyCharm不会加载最初的Django项目设置,也就是那些manage.py shell最初运行的项目。 可以将它们添加到testing脚本的开头,或者使用manage.py test运行manage.py test

版本:

  • Python 3.5(在virtualenv中)
  • PyCharm 2016.3.2专业版
  • Django 1.10