2012-04-07 14 views
25

Acabo de instalar mi proyecto Django en un sistema nuevo e instalé Django 1.4. Sin embargo, cuando trato de ejecutar o manage.py runservermanage.py syncdb consigo este error del Sur:South + Django 1.4 Error de base de datos

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' 

estoy usando SQlite actualmente. Creo que podría ser debido a esto change con Django 1.4, sin embargo, otros usuarios no parecen tener mi problema. Todos mis paquetes están actualizados.

Respuesta

20

No tiene DATABASES correcto en su settings. Debe haber una base de datos llamada 'default'

+0

Gracias, se me olvidó que estaba revisando mi nombre de host para utilizar valores locales, y mi nombre de host fue cambiado con mi nuevo sistema, para que mi base de datos no estuviera configurada –

+1

Recibo el mismo error. ¿Puedes elaborar la solución? Gracias @ saul.shanabrook –

+2

Por favor, siga el enlace proporcionado, hay un ejemplo de trabajo mínimo en los documentos – ilvar

39

Tengo el mismo mensaje de error pero con una causa y solución diferente en comparación con la respuesta aceptada. La respuesta corta es agregar SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} a settings.py.

Aquí está la explicación completa:

rastreo a south/db/__init__.py muestra que se detectó ninguna base de datos, la razón es que mi nombre de motor de base de datos no está en la lista codificada en 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 
} 

utilizo PostGIS 2.0 en Windows y hace un tiempo tuve que aplicar un parche menor al backend de postgis de django. Como no instalé django desde el origen, hice una copia del backend y apliqué el parche manualmente a esa copia. Entonces, el nuevo backend está en una ubicación diferente, y esa ubicación no está en la lista de claves en South's engine_modules que se muestra arriba.

Afortunadamente, South proporciona una variable de configuración llamada SOUTH_DATABASE_ADAPTERS que le dice a South directamente el motor de base de datos real de cada alias. Yo era capaz de correr syncdb después de insertar esta línea en settings.py

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

+0

¡Esto funcionó para mí! –

+8

Funcionó para mí, en mi caso tengo ''ENGINE': 'mysql.connector.django'' en' DATABASES' y 'SOUTH_DATABASE_ADAPTERS = {' default ':' south.db.mysql '}' para South. MySQL 5.6 –

+0

Esto funcionó para mí. –

4

Para aquellos que utilizan Heroku, que es mi caso. Me encontré con este problema también, tengo el conjunto de base de datos por defecto, ya que señalan en las guías heroku:

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

Sin embargo, todavía aparece el error ketError 'por defecto'. Esto se debe a que no hay una base de datos aprovisionada y, por lo tanto, dj_database_url no puede encontrarla y genera ese error confuso.

Para resolver sólo el suministro de la base de datos y promoverlo como se explica en heroku postgresql

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