使用django 1.4执行syncdb时出现“settings.DATABASES配置不正确”错误

时间:2012-04-19 12:58:40

标签: django django-models django-admin

我创建了一个简单的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 - 任何想法?提前谢谢!

5 个答案:

答案 0 :(得分:24)

可能是django没有访问您认为它使用的settings.py文件。 尝试使用--settings

将django明确指向您的设置文件
./manage.py --settings=nameofproject.settings runserver/syncdb

如果这样可行,那么你必须弄清楚django导入错误设置文件的原因。

您是否意外地从1.3升级到1.4?

答案 1 :(得分:14)

对我来说,我刚才与django 1.6有类似的问题:

<强>背景

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

我想直接在postgresql服务器上开发(所以如果你还没有使用postgresql,请不要复制&#34; .postgresql_psycopg2&#34;

  • 使用本地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. 我跑了&#34; heroku config&#34;以下列格式查看我的详细信息:

    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正在为我工​​作


  4. 如果你想尝试在本地开发 ,请注释掉上面的所有内容,而是设置你的本地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

    的那个

答案 2 :(得分:4)

项目中有两个'settings.py'文件(如果你的操作系统是类UNIX):

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

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

祝你好运!

答案 3 :(得分:3)

您更新了哪些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)附带了更新的默认项目布局和manageproject管理命令的manage.py文件,并且默认项目布局已更改。

要修复错误,您应该使用的正确settings.py文件不是主项目目录中的文件,它是在项目目录中创建的目录内的名称(具有相同名称)。

答案 4 :(得分:0)

重新安装Django为我做了伎俩(实际上删除了egg文件),如以下链接所示。 https://code.djangoproject.com/ticket/18058 似乎从1.3升级到1.4似乎会导致很多这些问题。