【问题标题】:Django and venv: settings.DATABASES is improperly configured. Please supply the ENGINE valueDjango 和 venv:settings.DATABASES 配置不正确。请提供 ENGINE 值
【发布时间】:2013-01-08 06:18:03
【问题描述】:

当我运行 python manage.py syncdb 时会发生这种情况。当我运行 python manage.py syncdb --mysite.settings 时也会发生这种情况。不知道从哪里开始:django 无法识别我的设置文件,我不知道为什么或如何纠正它。

python ../manage.py syncdb
Traceback (most recent call last):
  File "../manage.py", line 9, in <module>
    execute_from_command_line(sys.argv)
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/home/ryan/Programming/OpenCV-2.4.2/msheroku/venv/local/lib/python2.7/site-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': 'postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'xxx',                      # Or path to database file if using sqlite3.
        'USER': 'xxx',                      # Not used with sqlite3.
        'PASSWORD': 'xxx',                  # 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.
    }   
}

我很确定它没有找到正确的设置文件。

【问题讨论】:

  • 你可以在你的 settings.py 中发布数据库配置吗?
  • 那么,您的settings.DATABASES 配置正确吗?

标签: django virtualenv


【解决方案1】:

正确的应该是这样的。

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

编辑:将主机更改为 localhost 以反映 cmets 和 manage.py

基于您运行同步数据库的方式

python manage.py syncdb --mysite.settings

确保您的 manage.py 文件指定了正确的 DJANGO_SETTINGS_MODULE

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

您应该能够在没有 --mysite.settings 的情况下运行 syncdb

python manage.py syncdb

【讨论】:

  • 特别是 'ENGINE': 'django.db.backends.postgresql_psycopg2'
  • @camelCase 你提到了 virtualenv。霍德是你创建的,你是如何运行它的?你使用的是什么 Django 版本? localhost 的空字符串就可以了。就像 Nathaniel 说的,你应该改变 ENGINE
  • @CésarBustíos localhost 的空字符串并非普遍适用。来自文档:docs.djangoproject.com/en/dev/ref/settings 如果您使用的是 PostgreSQL,默认情况下(空主机),与数据库的连接是通过 UNIX 域套接字(pg_hba.conf 中的“本地”行)完成的。如果您想通过 TCP 套接字连接,请将 HOST 设置为“localhost”或“127.0.0.1”(pg_hba.conf 中的“host”行)。在 Windows 上,您应该始终定义 HOST,因为 UNIX 域套接字不可用。
  • @LimH。谢谢我不知道。我想我以前从来没有遇到过麻烦,因为我从不使用 PostgreSQL 或 Windows :)
  • DATABASE 是在同一个文件还是在 local_settings.py 文件中重新定义?
【解决方案2】:

您好,我假设您正在使用 heroku 测试您的应用程序并尝试连接到本地数据库?如果是这样,请务必删除这行代码:

# Parse database configuration from $DATABASE_URL
  import dj_database_url
  DATABASES['default'] =  dj_database_url.config()

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
  SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

当你要连接到另一个服务器上的数据库时添加它。

【讨论】:

  • 能同时使用HEROKU和Local DB怎么样?
  • @mgPePE 有一个 settings-local.py 和 settings-production.py 文件。然后当你在本地运行时输入 python manage.py --settings=appname.settings-local
猜你喜欢
  • 2013-11-28
  • 2017-04-21
  • 2014-11-22
  • 1970-01-01
  • 2012-07-12
  • 2012-04-08
  • 1970-01-01
  • 2017-10-20
  • 2017-12-17
相关资源
最近更新 更多