2012-04-07 6 views
25

Ich habe gerade mein Django-Projekt auf einem neuen System installiert und Django 1.4 installiert. Jedoch wenn ich versuche, manage.py runserver oder manage.py syncdb ich aus Süd erhalten diesen Fehler zu laufen:South + Django 1.4 Datenbankfehler

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' 

ich SQlite bin derzeit. Ich denke, es könnte wegen dieser change mit Django 1.4 sein, aber andere Benutzer scheinen nicht mein Problem zu haben. Alle meine Pakete sind auf dem neuesten Stand.

Antwort

20

Sie haben DATABASES in Ihrem settings nicht korrekt. Es sollte eine Datenbank namens 'default'

+0

Danke, ich habe vergessen, dass ich meinen Hostnamen war die Überprüfung lokale Einstellungen zu verwenden, und mein Hostname wurde mit meinem neuen System geändert, so dass meine Datenbank nicht eingestellt wurde. –

+1

Ich bekomme den gleichen Fehler. Können Sie die Lösung ausarbeiten? Danke @ saul.shanabrook –

+2

Bitte folgen Sie dem angegebenen Link, es gibt ein minimales funktionierendes Beispiel in der Dokumentation – ilvar

39

Ich habe die gleiche Fehlermeldung, aber mit einer anderen Ursache und Lösung im Vergleich zu der angenommenen Antwort. Die kurze Antwort fügt SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} zu hinzu. Hier

ist die vollständige Erklärung:

-south/db/__init__.py Tracing zeigt, dass keine Datenbank gefunden wurde, der Grund dafür ist, dass meine Datenbank-Engine Name nicht in der hartcodierte Liste ist 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 
} 

Ich benutze postgis 2.0 unter Windows und vor einiger Zeit musste ein kleiner Patch auf das Postgis-Backend von Django angewendet werden. Da ich Django nicht von der Quelle installiert habe, habe ich eine Kopie des Backends erstellt und den Patch manuell auf diese Kopie angewendet. Das neue Backend befindet sich also an einem anderen Ort, und dieser Ort ist nicht in der oben gezeigten Liste der Schlüssel in Souths engine_modules.

Glücklicherweise bietet South eine Einstellungsvariable namens SOUTH_DATABASE_ADAPTERS, die South direkt die tatsächliche Datenbank-Engine jedes Alias ​​mitteilt. Ich konnte syncdb nach dem Einfügen dieser Linie in settings.py

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

+0

Das hat für mich funktioniert! –

+8

Arbeitete für mich, in meinem Fall habe ich ''ENGINE': 'mysql.connector.django'' in' DATABASES' und 'SOUTH_DATABASE_ADAPTERS = {' default ':' south.db.mysql '}' für South. MySQL 5.6 –

+0

Das hat bei mir funktioniert. –

4

Für diejenigen mit Heroku laufen, die mein Fall ist. Ich fand auch dieses Problem, ich die Standard-Datenbank festgelegt haben, wie sie in den Heroku Führungen hinweisen:

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

jedoch die ketError ‚default‘ Fehler weiterhin angezeigt wird. Dies liegt daran, dass keine Datenbank bereitgestellt wurde und somit dj_database_url sie nicht finden kann und diesen verwirrenden Fehler ausgelöst hat.

es zu lösen nur die Datenbank Bereitstellung und sie fördern, wie in heroku postgresql erklärte

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