我创建了一个简单的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 - 任何想法?提前谢谢!
答案 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;
当我取消注释该行以使用heroku db
时出现错误DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL'))
最初的尝试是添加更多细节,例如另一行
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
但这并没有起作用,因为那时错误问我NAME,它拒绝了。
<强>解强>
最后,这解决了它:
我跑了&#34; heroku config&#34;以下列格式查看我的详细信息:
postgres://user:pass@localhost/dbname
我更新了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中可见
然后我注释掉后面的行,
# 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',
}
}
的那个
答案 2 :(得分:4)
项目中有两个'settings.py'文件(如果你的操作系统是类UNIX):
您需要将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似乎会导致很多这些问题。