Django DB 设置“配置不当”错误

Posted

技术标签:

【中文标题】Django DB 设置“配置不当”错误【英文标题】:Django DB Settings 'Improperly Configured' Error 【发布时间】:2013-03-11 11:49:13 【问题描述】:

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 【参考方案1】:

你不能只启动 Python 并检查,Django 不知道你想从事什么项目。您必须执行以下操作之一:

使用python manage.py shell 使用django-admin.py shell --settings=mysite.settings(或您使用的任何设置模块) 将操作系统中的DJANGO_SETTINGS_MODULE 环境变量设置为mysite.settings

(在 Django 1.6 中已删除)在 python 解释器中使用setup_environ

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

setup_environ(settings)

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

【讨论】:

谢谢!这在文档中对我来说不是很清楚,或者我可能在需要做的时候读过它并忘记了。 奇怪的是,它似乎找不到“mysite.settings”文件,但我可以看到它就在那里,就像 mysite/settings.py。啊!我开始讨厌 Django。 是的,setup_environ 在 1.6 中被删除,但 --settings 应该可以工作。你确定你的设置在FirstBlog.settings,而不仅仅是在当前目录的settings 以上都没有对我有用,但是这个对我有用:$ export DJANGO_SETTINGS_MODULE="my_project.settings" PyCharm 中执行此操作的地方是 Run |编辑配置 | (例如项目中的单元测试)|配置 |环境 |环境变量:DJANGO_SETTINGS_MODULE=(project directory name).settings【参考方案2】:

在你的 python shell/ipython 中做:

from django.conf import settings

settings.configure()

【讨论】:

Apps aren't loaded yet.【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

相同,在 django 1.10 上,但在尝试运行命令 loaddata 时【参考方案5】:

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

版本:

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

【讨论】:

【参考方案6】:

在 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(父级)中

【讨论】:

非常感谢,其他解决方案都不适用于我的情况 也可以使用 python 2.7 这个.py应该放在root,这意味着它和manage.py一起。如何将它放在随机文件夹中? 应该注意的是,这只有在你把它放在文件的顶部时才有效,如果你把它放在像if __name__ == "__main__": 这样的东西里面,它就不能正常工作:)【参考方案7】:

对于使用 IntelliJ 的人,通过这些设置,我能够从 shell(在 Windows 上)进行查询。

【讨论】:

以上是关于Django DB 设置“配置不当”错误的主要内容,如果未能解决你的问题,请参考以下文章

配置不当的引擎 sqlite , Django

Django AWS Elastic Beanstalk 错误配置不当:加载 MySQLdb 模块时出错:没有名为 MySQLdb 的模块

Django 教程 - 配置不当的异常(未安装 pytz)

Django:配置不当:静态文件查找器的存储后端没有有效位置

引发配置不当的 psycopg2(postgresql)

MySQL 配置不当原因:不安全使用相对路径