>我已经创建了一个简单的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 连接到数据库 - 有什么想法吗?提前感谢!
django 没有访问你认为它使用 settings.py 文件。尝试使用 --settings 显式将 django 指向你的设置文件
./manage.py --settings=nameofproject.settings runserver/syncdb
如果这有效,那么你必须弄清楚为什么 django 导入了错误的设置文件。
您是否意外地从 1.3 升级到 1.4?
对我来说,我刚才在 django 1.6 上遇到了类似的问题:
背景
使用 Heroku Postgresql 数据库的 Django 1.6 heroku 项目
我想直接在postgresql服务器上开发(所以如果你不使用postgresql,请不要复制".postgresql_psycopg2"位)
- 使用本地 psql 数据库进行开发没有问题
当我取消注释该行以使用 heroku db 时出现该错误
DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL'))
最初的尝试是添加更多详细信息,例如另一行,
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
但这不起作用,因为随后错误要求我输入 NAME,但它拒绝了。
溶液
最后,这解决了它:
- 我
运行了"heroku config"以查看我的详细信息以以下格式呈现给我:
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'))
所以数据库只在 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
您的项目中有两个"settings.py"文件(如果您的操作系统是类 UNIX 的):
- 一个是在第一个目录
- 一个在目录/目录中
您需要将引擎写入第二个(dir/dir/setting.py
)。
祝你好运!
您更新了哪个 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 management 命令 manage.py 文件,并且默认项目布局已更改。
要修复您的错误,您应该使用的正确 settings.py 文件不是主项目目录中的文件,而是在项目目录中创建的目录内的文件(具有相同的名称)。
重新安装 Django 为我做了一个技巧(实际上删除了 egg 文件),如以下链接所示。https://code.djangoproject.com/ticket/18058似乎从 1.3 升级到 1.4 似乎会导致很多这些问题。