Django DB设置“配置不正确”错误


170

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解释器之外可以正常工作时,如何对其进行不正确的配置?在我的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.
    }
}

...这是如何配置不正确的?


设置新项目时遇到了这个问题。我发现这样做很有帮助unset DJANGO_SETTINGS_MODULE。我遇到了在.bashrc中设置env var的问题
fncomp

Answers:


264

您不能只启动Python并检查内容,Django不知道您要处理哪个项目。您必须执行以下操作之一:

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

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

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


谢谢!在文档中我对这还不太清楚,或者也许我已经读了它,却在需要的时候就忘了。
Zamphatta

6
奇怪的是,它似乎找不到“ mysite.settings”文件,但我可以看到它以mysite / settings.py的形式存在。啊! 我开始讨厌Django。
Zamphatta 2013年

3
是的,setup_environ已在1.6中删除,但--settings应该可以使用。您确定设置在更远的地方FirstBlog.settings,而不仅仅是在settings当前目录中吗?
帕维尔·阿诺索夫

21
以上都不对我$ export DJANGO_SETTINGS_MODULE="my_project.settings"
有用

22
PyCharm中,执行此操作的位置是Run | 编辑配置| (例如项目中的单元测试)| 配置| 环境| 环境变量: DJANGO_SETTINGS_MODULE=(project directory name).settings
鲍勃·斯坦因


26

在2017年使用django 1.11.5和python 3.6(从注释中也可以使用python 2.7):

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

.py其中你把这个代码应该是在mysite(父之一)


非常感谢,在我看来,其他解决方案都没有用
evnica

与Python 2.7工作太
Александр

.py应该放在根目录,这意味着它与manage.py一起。如何将其放在随机文件夹中?
匿名

1
应该注意的是,只有将其放在文件的顶部,如果您将其放在类似的文件中,if __name__ == "__main__":这样才能正常工作:)
Josh Correia

11

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


同样,在Django 1.10上,但是在尝试运行命令loaddata时
amchugh89

4

就我而言,尝试通过PyCharm运行Django测试时遇到了这个问题。我认为这是因为PyCharm不会加载初始Django项目设置,即manage.py shell最初运行的设置。可以将它们添加到测试脚本的开头,也可以使用来运行测试manage.py test

版本:

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

3

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.