2012-04-07 12 views
25

Ho appena installato il mio progetto Django su un nuovo sistema e installato Django 1.4. Tuttavia quando provo a fare funzionare manage.py runserver o manage.py syncdb ottengo questo errore dal Sud:Sud + Django 1.4 Errore database

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' 

sto usando SQlite attualmente. Penso che potrebbe essere a causa di questo change con Django 1.4, tuttavia altri utenti non sembrano avere il mio problema. Tutti i miei pacchetti sono aggiornati.

risposta

20

Non hai corretto DATABASES nel tuo settings. Ci dovrebbe essere un database denominato 'default'

+0

Grazie, ho dimenticato che stavo controllando il mio nome host per utilizzare le impostazioni locali, e il mio nome host è stato cambiato con il mio nuovo sistema, in modo che il mio database non fosse impostato. –

+1

Sto ottenendo lo stesso errore. Puoi elaborare la soluzione. Grazie @ saul.shanabrook –

+2

Si prega di seguire il link fornito, c'è un esempio di lavoro minimo nei documenti – ilvar

39

Ho lo stesso messaggio di errore ma con una causa e una soluzione diverse rispetto alla risposta accettata. La risposta breve è l'aggiunta di SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} a settings.py.

Ecco la spiegazione completa:

Tracing per south/db/__init__.py dimostra che nessun database è stato rilevato, il motivo è che il mio nome motore di database non è nella lista hardcoded 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 
} 

Io uso postgis 2.0 su Windows e qualche tempo fa ha dovuto applicare una patch minore al backend postjun di django. Poiché non ho installato django dal sorgente, ho creato una copia del backend e applicato la patch manualmente a quella copia. Quindi il nuovo back-end si trova in una posizione diversa e quella posizione non è nell'elenco delle chiavi in ​​Sud engine_modules mostrato sopra.

Fortunatamente, South fornisce una variabile di impostazioni denominata SOUTH_DATABASE_ADAPTERS che indica a South direttamente il motore di database effettivo di ciascun alias. Sono stato in grado di correre syncdb dopo aver inserito questa linea in settings.py

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

+0

Questo ha funzionato per me! –

+8

Ha funzionato per me, nel mio caso ho ''ENGINE': 'mysql.connector.django'' in' DATABASES' e 'SOUTH_DATABASE_ADAPTERS = {' default ':' south.db.mysql '}' per South. MySQL 5.6 –

+0

Questo ha funzionato per me. –

4

Per coloro che utilizzano Heroku, che è il mio caso. Ho trovato anche questo problema, ho il set di database predefinito, come fanno notare nelle guide Heroku:

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

Tuttavia, appare ancora il ketError errore di 'default'. Ciò è dovuto al fatto che non è disponibile alcun database, pertanto dj_database_url non riesce a trovarlo e genera un errore confuso.

per risolverlo basta disposizione il database e promuoverlo come spiegato in heroku postgresql

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