django django-south django-staticfiles django-1.4

Error de base de datos del sur+Django 1.4



django-south django-staticfiles (3)

Acabo de instalar mi proyecto Django en un nuevo sistema e instalé Django 1.4. Sin embargo, cuando intento ejecutar manage.py runserver o manage.py syncdb , recibo este error de 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''

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


No tienes las DATABASES correctas en tu settings . Debe haber una base de datos llamada ''default''


Para aquellos que usan Heroku, que es mi caso. También encontré este problema, tengo el conjunto de bases de datos predeterminado, como lo indican las guías de heroku:

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

Sin embargo, el error "predeterminado" de ketError sigue apareciendo. Esto se debe a que no hay una base de datos aprovisionada y, por lo tanto, dj_database_url no puede encontrarla y generó ese error confuso.

Para resolverlo, simplemente aprovisione la base de datos y promuévala como se explica en heroku postgresql

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


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:

El rastreo hacia south/db/__init__.py muestra que no se detectó ninguna base de datos, la razón es que el nombre de mi 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 la fuente, hice una copia del backend y apliqué el parche manualmente a esa copia. Así que el nuevo backend está en una ubicación diferente, y esa ubicación no está en la lista de claves en los engine_modules de engine_modules de South que se muestran 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. Pude ejecutar syncdb después de insertar esta línea en settings.py

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