South + Django 1.4 Database error

孤者浪人 提交于 2019-12-20 10:24:09

问题


I have just installed my Django project on a new system, and installed Django 1.4. However when I try to run manage.py runserver or manage.py syncdb I get this error from 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'

I am using SQlite currently. I think it might be because of this change with Django 1.4, however other users don't seem to having my problem. All my packages are up to date.


回答1:


You don't have correct DATABASES in your settings. There should be a database named 'default'




回答2:


I have the same error message but with a different cause and solution compared to the accepted answer. The short answer is adding SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} to settings.py.

Here is the full explanation:

Tracing to south/db/__init__.py shows that no database was detected, the reason being that my database engine name is not in the hardcoded list in 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
}

I use postgis 2.0 on Windows and a while ago had to apply a minor patch to django's postgis backend. Because I didn't install django from source, I made a copy of the backend and applied the patch manually to that copy. So the new backend is in a different location, and that location isn't in the list of keys in South's engine_modules shown above.

Luckily, South provides a settings variable called SOUTH_DATABASE_ADAPTERS that tells South directly the actual database engine of each alias. I was able to run syncdb after inserting this line into settings.py

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




回答3:


For those using Heroku, which is my case. I found this problem too, I have the default database set, as they point out in the heroku guides:

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

However, the ketError 'default' error still appears. This is due to there is no database provisioned, and thus dj_database_url cannot find it and raised that confusing error.

To solve it just provision the database and promote it as explained in heroku postgresql

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


来源:https://stackoverflow.com/questions/10058035/south-django-1-4-database-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!