【问题标题】:"settings.DATABASES is improperly configured" error performing syncdb with django 1.4“settings.DATABASES 配置不正确”使用 django 1.4 执行 syncdb 时出错
【发布时间】:2012-04-30 23:59:20
【问题描述】:

我创建了一个简单的 django 1.4 项目,并试图发出 syncdb 来创建(postgres)数据库模式。我收到此错误:-

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
cursor = connection.cursor()
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain
raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.Please supply the ENGINE value. Check settings documentation for more details.

我的 settings.py 文件看起来像:-

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'test',                      # Or path to database file if using sqlite3.
        'USER': 'test',                      # Not used with sqlite3.
        'PASSWORD': 'test',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
     }
}

我可以使用 psql 连接到数据库 OK - 有什么想法吗?提前致谢!

【问题讨论】:

  • ./manage.py diffsettings 的输出中的DATABASES 行是什么样的?
  • DATABASES = {'default': {'ENGINE': 'django.db.backends.', 'NAME': '', 'HOST': '', 'USER': '', '密码':'','端口':''}}。这看起来不正确吧? - 怎么解决?
  • 如果您使用某种虚拟环境,可能是您忘记获取环境...

标签: django django-models django-admin


【解决方案1】:

可能是 django 没有访问您认为它使用的 settings.py 文件。 尝试使用 --settings 明确地将 django 指向您的设置文件

./manage.py --settings=nameofproject.settings runserver/syncdb

如果这样的话,你必须弄清楚为什么 django 导入了错误的设置文件。

你是不是不小心从 1.3 升级到 1.4 了?

【讨论】:

  • 谢谢 - 全部修复。这是一个 1.3 -> 1.4 升级问题。清理并重新安装 django,一切正常。
  • 另一个提示是使用以下命令检查您的设置: echo $DJANGO_SETTINGS_MODULE - 如果将其设置为意外的值,则可能会导致此错误。如果是这样,您可以使用以下命令测试设置它:DJANGO_SETTINGS_MODULE=nameofproject.settings ./manage.py runserver
  • @Jonas 请告诉我 django 1.7 的命令,因为 syncdb 在其中不起作用
  • 我也发现这在较新版本的 django 中不起作用,但也许继任者是 ./manage.py diffsettings --settings=nameofproject.settings @ShravanKumarSuthaar
【解决方案2】:

对我来说,我刚才在使用 django 1.6 时遇到了类似的问题:

背景

使用 Heroku Postgresql 数据库的 Django 1.6 heroku 项目

我想直接在 postgresql 服务器上开发(所以如果你不使用 postgresql,请不要复制“.postgresql_psycopg2”位)

  • 使用本地 psql db 开发没有问题
  • 当我取消注释以使用 heroku db 时出现该错误

    DATABASES['default'] =  dj_database_url.config(default=os.getenv('DATABASE_URL'))  
    

最初的尝试是添加更多细节,例如另一行,

DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'

但这不起作用,因为错误要求我输入 NAME,但它拒绝了。

解决方案

最后,这解决了它:

  1. 我运行“heroku config”来查看我的详细信息,格式如下:

    postgres://user:pass@localhost/dbname
    
  2. 我更新了 settings.py 文件以反映这些细节:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': 'your_heroku_db_name',                     
            'USER': 'your_heroku_db_user_name',
            'PASSWORD': 'your_heroku_password',
            'HOST': 'ec2-23-21-133-106.compute-1.amazonaws.com', # Or something like this
            'PORT': '5432',                     
        }
    }
    

    该提示来自https://stackoverflow.com/a/19719966/870121

    注意:我的下一个计划是将这些抽象回 .env 变量,而不是让它们在 settings.py 中可见

  3. 然后我把后面那行注释掉了,

    # DATABASES['default'] =  dj_database_url.config(default=os.getenv('DATABASE_URL'))  
    

    所以 DATABASES 只在 settings.py 文件中指定了一次

    这样程序会读取连接到 postgresql heroku db 所需的所有内容

    例如,现在 python manage.py syncdb 正在为我工​​作


如果您想尝试本地开发,请注释掉上面的所有内容,然后设置您的本地 postgresql 服务器运行并取消注释上述本地等效项:

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': 'cool01db',
         'USER': '', 
         'PASSWORD': '',
         'HOST': 'localhost', # '127.0.0.1' probably works also
         'PORT': '5432',
     }
 }

来自https://stackoverflow.com/a/25962586/870121

【讨论】:

  • 谢谢,这对我很有帮助! (在 heroku 上工作得很好,但在本地却不行......)
  • heroku 文档内容繁多,令人困惑
【解决方案3】:

您的项目中有两个“settings.py”文件(如果您的操作系统类似于 UNIX):

  • 一个在第一个目录中
  • 一个在目录/目录中

您需要将 ENGINE 写入第二个 (dir/dir/setting.py)。

祝你好运!

【讨论】:

  • 对于 PyCharm 用户,我们在移动整个项目的层次结构时可能会遇到这种问题。无论我们使缓存失效多少次,设置都会停留在旧路径上。例如,要运行 Django 测试,我们必须包含正确的settings.py 的自定义设置,即在此答案中所述的 dir/dir 内。现在它可以完美运行了。
【解决方案4】:

您更新了哪个 settings.py 文件?当我没有读到 Django 从 1.3 到 1.4 的更改导致双重导入时,我最初也遇到了同样的问题。这是https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py 的摘录。最新版本的 Django(当前为 1.4.2)附带了更新的默认项目布局和用于 startproject 管理命令的 manage.py 文件,并且默认项目布局已更改。

要修复您的错误,您应该使用的正确 settings.py 文件不是项目主目录中的那个,而是项目目录中创建的目录中的那个(同名)。

【讨论】:

    【解决方案5】:

    按照以下链接的建议,重新安装 Django 对我有用(实际上是删除了 egg 文件)。 https://code.djangoproject.com/ticket/18058 看来从 1.3 升级到 1.4 似乎会导致很多这样的问题。

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多