南+ Django 1.4数据库错误

sau*_*ook 25 django django-south django-staticfiles django-1.4

我刚刚在一个新系统上安装了我的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'
Run Code Online (Sandbox Code Playgroud)

我目前正在使用SQlite.我想这可能是因为Django 1.4 的这种变化,但其他用户似乎没有我的问题.我的所有包裹都是最新的.

las*_*ood 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
}
Run Code Online (Sandbox Code Playgroud)

我在Windows上使用postgis 2.0,前不得不在django的postgis后端应用一个小补丁.因为我没有从源安装django,所以我制作了后端的副本并手动将补丁应用到该副本.因此新的后端位于不同的位置,并且该位置不在engine_modules上面显示的South的键列表中.

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

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

  • 为我工作,在我的情况下,我有''ENGINE':'DATABASES`中的'mysql.connector.django'`和South的'SOUTH_DATABASE_ADAPTERS = {'default':'south.db.mysql'}`.MySQL 5.6 (8认同)

ilv*_*var 20

您没有正确DATABASESsettings.应该有一个名为的数据库'default'

  • 请按照提供的链接,在文档中有一个最小的工作示例 (2认同)