2012-04-07 68 views
25

我刚在新系统上安装了我的Django项目,并安装了Django 1.4。然而,当我尝试运行manage.py runservermanage.py syncdb我从南这个错误:South + Django 1.4数据库错误

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的change,但其他用户似乎没有我的问题。我所有的软件包都是最新的。

回答

20

您的settings中没有正确的DATABASES。应该有一个数据库命名为'default'

+0

谢谢你解释,我忘了,我检查我的主机使用本地设置,我的主机与我的新系统改变,所以我的数据库没有设置。 – 2012-04-08 05:47:05

+1

我收到了同样的错误。你能否详细说明解决方案?谢谢@ saul.shanabrook – 2013-01-18 19:21:41

+2

请按照提供的链接,在文档中有一个最小的工作示例 – ilvar 2013-02-01 13:43:50

39

我有相同的错误信息,但与接受的答案相比有不同的原因和解决方案。简短的回答是将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上,不久前不得不对django的postgis后端应用一个小补丁。因为我没有从源代码安装django,所以我制作了一个后端副本并手动将补丁应用到该副本。所以新的后端位于不同的位置,并且该位置不在上面显示的South的engine_modules中的密钥列表中。

幸运的是,South提供了一个名为SOUTH_DATABASE_ADAPTERS的设置变量,它直接告诉South每个别名的实际数据库引擎。我是能够插入这条线后运行syncdbsettings.py

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

+0

这对我有用! – 2013-09-08 16:29:09

+8

工作对我来说,在我的情况下,我有'引擎':'DATABASES'中的'mysql.connector.django''和'SOUTH_DATABASE_ADAPTERS = {'default':'south.db.mysql'}'为南。 MySQL 5.6 – 2013-10-06 09:37:04

+0

这对我有用。 – 2013-10-08 03:58:05

4

对于使用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