南+ Django的1.4数据库错误(South + Django 1.4 Database err

2019-07-28 20:48发布

我刚安装了新的系统上我的Django项目,并安装的Django 1.4。 然而,当我尝试运行manage.py runservermanage.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,但其他用户似乎并不有我的问题做。 我所有的包都是最新的。

Answer 1:

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



Answer 2:

我有同样的错误信息,但有不同的原因和解决方案相比,接受的答案。 简短的回答是添加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,我做后端的副本并手动应用补丁到该副本。 因此,新的后端处于不同的位置,该位置是不是在南方键列表engine_modules如上图所示。

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

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



Answer 3:

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


文章来源: South + Django 1.4 Database error