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

bzo*_*bzo 36 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.
Run Code Online (Sandbox Code Playgroud)

我的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.
     }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用psql连接到数据库OK - 任何想法?提前致谢 !

Jon*_*gat 25

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

./manage.py --settings=nameofproject.settings runserver/syncdb
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢 - 全部修好了.这是1.3 - > 1.4升级问题.清理并重新安装django,一切都很好. (2认同)

Mar*_*ark 15

对我来说,我刚才有一个与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'))  
    
    Run Code Online (Sandbox Code Playgroud)

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

DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为那时错误问我NAME,它拒绝了.

最后,这解决了它:

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

    postgres://user:pass@localhost/dbname
    
    Run Code Online (Sandbox Code Playgroud)
  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',                     
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    该提示来自/sf/answers/1380397651/

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

  3. 然后我评论了后面的行,

    # DATABASES['default'] =  dj_database_url.config(default=os.getenv('DATABASE_URL'))  
    
    Run Code Online (Sandbox Code Playgroud)

    所以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',
     }
 }
Run Code Online (Sandbox Code Playgroud)

这是来自/sf/answers/1817381051/


小智 5

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

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

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

祝你好运!