【问题标题】:South + Django 1.4 Database errorSouth + Django 1.4 数据库错误
【发布时间】:2012-04-20 22:19:46
【问题描述】:

我刚刚在一个新系统上安装了我的 Django 项目,并安装了 Django 1.4。但是,当我尝试运行 manage.py runservermanage.py syncdb 时,我从 South 收到此错误:

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。我认为这可能是因为change 使用 Django 1.4,但是其他用户似乎没有遇到我的问题。我所有的包都是最新的。

【问题讨论】:

    标签: django django-south django-staticfiles django-1.4


    【解决方案1】:

    与接受的答案相比,我有相同的错误消息,但原因和解决方案不同。简短的回答是将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
    }
    

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

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

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

    【讨论】:

    • 为我工作,在我的情况下,我在 DATABASESSOUTH_DATABASE_ADAPTERS = { 'default' : 'south.db.mysql' } 中有 'ENGINE': 'mysql.connector.django' 。 MySQL 5.6
    • 感谢所有的钱,@Kevin。现在我有钱了!
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我忘了我正在检查我的主机名以使用本地设置,并且我的主机名是用我的新系统更改的,所以我的数据库没有设置。
    • 我遇到了同样的错误。您能否详细说明解决方案。谢谢@saul.shanabrook
    • 请点击提供的链接,文档中有一个最小的工作示例
    • 你能帮帮我吗我正在使用 jython,所以我不能为 postgresql 使用默认的数据库连接器。
    【解决方案3】:

    对于那些使用 Heroku 的人,这是我的情况。我也发现了这个问题,我设置了默认数据库,正如他们在 heroku 指南中指出的那样:

    DATABASES['default'] =  dj_database_url.config()
    

    但是,ketError 'default' 错误仍然出现。这是因为没有配置数据库,因此dj_database_url 找不到它并引发了这个令人困惑的错误。

    要解决它,只需按照heroku postgresql 中的说明配置数据库并对其进行推广

    heroku addons:add heroku-postgresql:dev
    heroku pg:promote HEROKU_POSTGRESQL_BLUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2013-03-25
      • 2014-09-14
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多