Юг + Django 1.4 Ошибка базы данных

Я только что установил свой проект 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, однако другие пользователи, похоже, не сталкиваются с моей проблемой. Все мои пакеты обновлены.


person saul.shanabrook    schedule 07.04.2012    source источник


Ответы (3)


У вас нет правильных БАЗ ДАННЫХ в вашей settings. Должна быть база данных с именем 'default'

person ilvar    schedule 08.04.2012
comment
Спасибо, я забыл, что проверял свое имя хоста, чтобы использовать локальные настройки, и мое имя хоста было изменено с моей новой системой, так что моя база данных не была установлена. - person saul.shanabrook; 08.04.2012
comment
Я получаю ту же ошибку. Можете ли вы уточнить решение. Спасибо @saul.shanabrook - person Nazim Zeeshan; 18.01.2013
comment
Пожалуйста, перейдите по предоставленной ссылке, в документации есть минимальный рабочий пример. - person ilvar; 01.02.2013
comment
Можете ли вы помочь мне, я использую jython, поэтому я не могу использовать коннектор БД по умолчанию для postgresql. - person pitchblack408; 08.09.2014

У меня такое же сообщение об ошибке, но с другой причиной и решением по сравнению с принятым ответом. Короткий ответ: добавить 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, и некоторое время назад мне пришлось применить небольшой патч к серверной части postgis django. Поскольку я не устанавливал django из исходного кода, я сделал копию серверной части и вручную применил патч к этой копии. Таким образом, новый бэкенд находится в другом месте, и этого места нет в списке ключей в engine_modules Юга, показанном выше.

К счастью, South предоставляет переменную настроек с именем SOUTH_DATABASE_ADAPTERS, которая напрямую сообщает South фактический механизм базы данных для каждого псевдонима. Я смог запустить syncdb после вставки этой строки в settings.py

SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}

person lastoneisbearfood    schedule 08.03.2013
comment
У меня сработало, в моем случае у меня есть 'ENGINE': 'mysql.connector.django' в DATABASES и SOUTH_DATABASE_ADAPTERS = { 'default' : 'south.db.mysql' } для юга. MySQL 5.6 - person Geradlus_RU; 06.10.2013
comment
Спасибо за все деньги, @Kevin. Теперь я богат!! - person lastoneisbearfood; 29.05.2015

Для тех, кто использует 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
person kiril    schedule 19.09.2013