Ответ 1
У вас нет правильного DATABASES в вашем settings
. Должна быть база данных с именем 'default'
Я только что установил свой проект Django в новой системе и установил Django 1.4. Однако, когда я пытаюсь запустить manage.py runserver
или manage.py syncdb
, я получаю эту ошибку с юга:
Validating models...
Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x1a67810>>
Traceback (most recent call last):
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run
self.validate(display_num_errors=True)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
self._populate()
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/models.py", line 2, in <module>
from south.db import DEFAULT_DB_ALIAS
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/db/__init__.py", line 78, in <module>
db = dbs[DEFAULT_DB_ALIAS]
KeyError: 'default'
В настоящее время я использую SQlite. Я думаю, что это может быть из-за этого изменить с Django 1.4, однако у других пользователей, похоже, нет моей проблемы. Все мои пакеты обновлены.
У вас нет правильного DATABASES в вашем settings
. Должна быть база данных с именем 'default'
У меня такое же сообщение об ошибке, но с другой причиной и решением по сравнению с принятым ответом. Короткий ответ заключается в добавлении SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
в settings.py
.
Вот полное объяснение:
Отслеживание до south/db/__init__.py
показывает, что база данных не обнаружена, причина в том, что имя моей базы данных не находится в списке жестких дисков в south/db/__init__.py
engine_modules = {
'django.db.backends.postgresql_psycopg2': 'postgresql_psycopg2',
'django.db.backends.sqlite3': 'sqlite3',
'django.db.backends.mysql': 'mysql',
'django.db.backends.oracle': 'oracle',
'sql_server.pyodbc': 'sql_server.pyodbc', #django-pyodbc
'sqlserver_ado': 'sql_server.pyodbc', #django-mssql
'firebird': 'firebird', #django-firebird
'django.contrib.gis.db.backends.postgis': 'postgresql_psycopg2',
'django.contrib.gis.db.backends.spatialite': 'sqlite3',
'django.contrib.gis.db.backends.mysql': 'mysql',
'django.contrib.gis.db.backends.oracle': 'oracle',
'doj.backends.zxjdbc.postgresql': 'postgresql_psycopg2', #django-jython
'doj.backends.zxjdbc.mysql': 'mysql', #django-jython
'doj.backends.zxjdbc.oracle': 'oracle', #django-jython
}
Я использую postgis 2.0 для Windows, и некоторое время назад мне пришлось применить незначительный патч для backgis django postgis. Поскольку я не установил django из исходного кода, я сделал копию бэкэнда и применил исправление вручную к этой копии. Таким образом, новый бэкэнд находится в другом месте, и это местоположение отсутствует в списке клавиш на юге engine_modules
, показанных выше.
К счастью, юг предоставляет переменную настроек, называемую SOUTH_DATABASE_ADAPTERS
, которая сообщает Югу непосредственно фактический движок базы данных каждого псевдонима. Я смог запустить syncdb
после вставки этой строки в settings.py
SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
Для тех, кто использует Heroku, это мой случай. Я тоже нашел эту проблему, у меня есть набор баз данных по умолчанию, как они указывают в руководствах heroku:
DATABASES['default'] = dj_database_url.config()
Однако ошибка ketError по умолчанию все еще появляется. Это происходит из-за отсутствия базы данных, и, следовательно, dj_database_url
не может ее найти и поднял эту запутанную ошибку.
Чтобы решить эту проблему, просто создайте базу данных и продвиньте ее, как описано в heroku postgresql
heroku addons:add heroku-postgresql:dev
heroku pg:promote HEROKU_POSTGRESQL_BLUE