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''}